第二步永远不会在光纤内部被调用(synchronize.js)

时间:2016-05-13 22:41:48

标签: node.js synchronize

我尝试使用synchronize.js来运行一些必须同步执行的函数。 我已经阅读了有关它herehere的内容。

要尝试一下,我已经创建了以下代码

else

逻辑告诉我输出应该是

var sync = require('synchronize');
var fiber = sync.fiber;
var await = sync.await;
var defer = sync.defer;

function function1(){
    console.log("Executing function 1")
}

sync.fiber(function() { 
console.log('Before');
var step1 = await(setTimeout(function1, 1000, defer()));
var step2 = console.log('After');
}); 

console.log('Outside');

但我得到的是

Before
Outside
Executing function 1
After

不知何故,step2没有被执行,我无法弄清楚原因。

1 个答案:

答案 0 :(得分:0)

我之前从未使用过这个插件,但是试试这个:

var sync = require('synchronize');
var fiber = sync.fiber;
var await = sync.await;
var defer = sync.defer;

function function1(callback){
    // defer expects this to be asynchronous (so it needs to execute a callback)
    console.log("Executing function 1")
    callback();
}

sync.fiber(function() { 
console.log('Before');
var step1 = await(setTimeout(function1, 1000, defer()));
var step2 = console.log('After');
}); 

console.log('Outside');

基本上我认为过早地调用defer(在执行回调之前)会导致它挂起。

修改

阅读文档后,我现在意识到defer创建了一个回调函数。这意味着它会挂起,因为它创建的回调永远不会被调用。如果有效,请告诉我。