无法弄清楚如何在节点.js中使用同步.js
Can't figure out how to use synchronize.js in node.js
我正在尝试在我的节点.js应用程序中使用模块同步.js,但我失败了。 函数仍然无序运行,我无法获取数据。这是我代码的一般片段。
// an object with devices to migrate
var devices2Migrate =
{
device_array: [],
init: function ( done )
{
sync.fiber(function()
{
//do init stuff
console.log( 'yay we have a DB connector' );
DB1.connect(function(err)
{
console.log( 'Database 1 is connected ...' );
}
DB2.connect(function(err)
{
console.log( 'Database 2 is connected ...' );
}
}, done);
},
loadDevices2Migrate: function ( done )
{
var self = this;
sync.fiber(function()
{
//get stuff from DB using query()
}, done);
}
}; //end of object
// load up all the data for the devices using the old style tables
sync.fiber(function(){
sync.await( devices2Migrate.init( sync.defer() ));
sync.await( devices2Migrate.loadDevices2Migrate( sync.defer() ) );
console.log( devices2Migrate.device_array );
console.log( "size: " + devices2Migrate.device_array.length );
});
但是发生的情况是控制台.log显示函数没有等待:
yay we have a DB connector
[]
size: 0
Database 1 is connected ...
Database 2 is connected ...
谁能指出我做错了什么? 如果需要,我可以更多地填写方法主体,起初我只是想保持简单。我知道我的方法(函数)是正确的,因为如果我将底部控制台.log调用(光纤中的调用)包装在 setTimeout 回调中,那么我确实会得到我的数据。
我最终使用了async.js包。 它更"用户友好",因为它有效!
编辑:异步,我这样做了:
// load up all the data for the devices using the old style tables
async.series(
devices2Migrate.init( callback ),
devices2Migrate.loadDevices2Migrate( callback )
){
// land here when done
console.log( devices2Migrate.device_array );
console.log( "size: " + devices2Migrate.device_array.length );
});
在使用 Node 时,这是我最喜欢的承诺包:
简单的承诺:
return when.promise(function(resolveCallback, rejectCallback) {
//do something here
var blah = foo("bar");
//return callback like this
resolveCallback();
});
链式承诺:
return when.promise(function(resolveCallback, rejectCallback) { 在这里做点什么 var blah = foo("bar");
//return callback like this
resolveCallback();
}).then(x);
var x = function(){
return when.promise(function(resolveCallback, rejectCallback) {
//do something here
var blah = foo("bar");
//return callback like this
resolveCallback();
});
};
相关文章:
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- javascript函数中的异步与同步.(Node.js)
- Node.js和同步API函数
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- 如何制作'http请求'在Node js中同步
- Node.js同步调用passport本地注册
- 与node.js同步写入非常大的数据块
- 节点应用.js - 同步读取文件
- Node.js-同步操作中建议的最长时间
- React JS同步处理array.map
- Node JS同步数据库调用
- 对远程站点的纯JS同步AJAX调用
- 用于缓存的Node.js同步请求
- 使用Video.JS同步两个视频
- 幻影JS同步AJAX请求:NETWORK_ERR: XMLHttpRequest异常101
- Node.js同步循环或迭代异步语句
- EXT Js同步ajax请求
- 节点 JS 同步 HTTPS 请求
- 如何使节点 js 同步