第二步永远不会在光纤内部被调用(synchronize.js)
2nd step never gets called inside fiber (synchronize.js)
我正在尝试使用 synchronize.js 到 运行 一些必须同步执行的功能。
我读过一些关于它的文章 here and here。
为了尝试一下,我创建了以下代码
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
但我得到的是
Before
Outside
Executing function 1
不知何故,step2 没有被执行,我不明白为什么。
我以前从未使用过这个插件,但试试这个:
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
创建了一个回调函数。这意味着它挂起,因为它创建的回调从未被调用。让我知道这是否有效。
我正在尝试使用 synchronize.js 到 运行 一些必须同步执行的功能。 我读过一些关于它的文章 here and here。
为了尝试一下,我创建了以下代码
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
但我得到的是
Before
Outside
Executing function 1
不知何故,step2 没有被执行,我不明白为什么。
我以前从未使用过这个插件,但试试这个:
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
创建了一个回调函数。这意味着它挂起,因为它创建的回调从未被调用。让我知道这是否有效。