javascript - 我做错了什么?

时间:2016-12-13 06:48:36

标签: javascript promise

我想了解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}])。你能否解释一下这种行为以及如何获得包含每个模块的数组的状态?感谢

1 个答案:

答案 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};
    });
}