我想了解Promise.all
的这种行为。
var checkIfModuleExists = promisify(
function (m, cb){
var doc = {
index: 'app1',
type: 'm1',
id: m.id,
body: { }
};
client.exists(doc ,
function (err, exists) {
cb(err, exists);
});
});
然后我有promise.all
这样:
var module = [{id: 'aa'}, {id: 'bb'}];
Promise.all( modules.map(function(module){
return checkIfModuleExists(module);
})).then(function(data){
console.log(data);
}).catch(function(err){
console.log(err);
});
当我运行这个'然后' show [false,true]:这看起来很正常,但我不明白的是,如果我改变我的回调函数,就像这个cb({exists: exists, m: m}, err);
,我只收到json,没有更多的数组。我想接收包含m的数组,如果模块存在与否(如下所示:[{m:true / false},{m:true / false}])。你能否解释一下这种行为以及如何获得包含每个模块的数组的状态?感谢
答案 0 :(得分:2)
如评论中所述,您混淆了错误和结果参数。会发生的是第一个承诺将拒绝,导致您的错误处理程序与您期望的对象一起执行。
但是,这不是你应该如何使用promisify
。而是
var clientExists = promisify(client.exists, {context:client});
function checkIfModuleExists(m) {
return clientExists({
index: 'app1',
type: 'm1',
id: m.id,
body: { }
}).then(function(exists) {
return {exists: exists, m: m};
});
}