出於測試目的,如果我能夠執行某些測試函數等待同步結果,我的代碼會更好看。在node.js中編寫同步函數的簡單方法
我知道關於node.js中事件編程的主要思想,但是在同步運行的測試中阻塞處理器對我來說不是問題。
是否有任何簡單的(單線程將是最好的)解決方案來執行函數,該函數通過回調(err,ret)返回一些值以通過「return」返回該ret,並假裝執行是同步的。
出於測試目的,如果我能夠執行某些測試函數等待同步結果,我的代碼會更好看。在node.js中編寫同步函數的簡單方法
我知道關於node.js中事件編程的主要思想,但是在同步運行的測試中阻塞處理器對我來說不是問題。
是否有任何簡單的(單線程將是最好的)解決方案來執行函數,該函數通過回調(err,ret)返回一些值以通過「return」返回該ret,並假裝執行是同步的。
您可以使用節點同步爲目的https://github.com/0ctave/node-sync
但總的來說,我建議你不這樣做。例如,摩卡測試框架允許您執行異步測試。另外異步瀑布https://github.com/caolan/async#waterfall是僞同步你的代碼的好方法。
我會說停留在異步思維框架。即使在測試時。
摩卡已內置done
回調函數來實現此目的。我用於我的代碼的模式:
describe('some spec', function() {
beforeEach(function (done) {
// common spec initalization code..
common.init (function (err, stuff) {
done(err);
});
});
describe('particular case', function() {
var result, another;
beforeEach(function (done) {
// case init 1..
case.init(function (err, res) {
result = res;
done(err);
});
});
beforeEach(function (done) {
// case init 2..
case.init2(function (err, res) {
another = res;
done(err);
});
});
it ('should be smth', function() {
expect(result).to.equal(0);
});
it ('should be smth else', function() {
expect(another).to.equal(1);
});
});
});
我知道。我的問題是關於不同的事情。 – Luman75
這是我一直在尋找的node.js問題。和你一樣,我只是想讓一個函數同步,並且像同步一樣返回。希望有人可以給出比使用異步,纖維等更好的答案,這仍然不會使該函數返回值! – samwize
不幸的是,沒有更好的解決方案。在某些情況下,承諾模式可能是解決方案。 – Luman75