【发布时间】:2015-09-22 21:17:11
【问题描述】:
在Node.js 应用程序中,我想实现这一点:
读取数组,取决于项目类型,决定使用返回 Q Promise 对象的特定函数。我希望这个过程按顺序运行。
我有这两个承诺:
var q = require('q');
Classes.prototype.fn1 = function (item) {
return q.Promise(function(resolve, reject){
Items.find({item_published: true}).exec(
function (err, events) {
if (err) {
reject('an error happened');
throw err;
}else{
resolve(events);
}
});
});
};
Classes.prototype.fn2 = function (item) {
return q.Promise(function(resolve, reject){
resolve(item);
});
};
这是主要代码:
self.items = [{},{},{}]; //some items
self.result = [];
self.items.forEach(function(item,index,array){
if(item.type == 1){
self.fn1(item)
.then(function(result){
self.result.push(result);
})
}
if(item.type == 2){
self.fn2(item)
.then(function(result){
self.result.push(result);
})
}
if(index == array.length-1){
callback(self.result);
}
});
但它不起作用。因为fn1 有一个异步进程,所以它在fn2 之后运行。我想要的只是顺序运行这些函数,即使其中一个具有异步进程。
【问题讨论】:
-
不要拒绝和扔,只是拒绝。
-
你为什么不直接链接承诺?您也可以将
if语句放在then方法中。 -
@TheMinister:我尝试了很多方法,但最后,由于 fn1 的异步行为,没有遵循顺序。你能给我一个你所说的真实例子吗?这两天我无法解决这个问题。谢谢
标签: javascript node.js promise q