Promise.all不要等待所有承诺解决

时间:2016-07-14 19:45:12

标签: javascript node.js promise

我需要并行获取数据,然后使用Node.js同时使用它们进行计算。

所以我使用promise.all,但它表现得很奇怪。当我第一次启动时,计算时间会更长,并且在第一个承诺解决之后就会失败,即使其他承诺成功。 当我第二次启动它时,速度更快,因为所有数据都存储在数据库中,所以它成功了。 我真的不明白。这是我的代码:

exports.addFood = function(ingrd, cb){
        /* Some code */
    cb(data.id);
});

我已在另一个文件中定义了addFood函数,如下所示:

<p:dataTable value="#{bean.list}"
             var="q"
             styleClass="data-apresenta"
             rowIndexVar="qi" itemType="none"
             paginator="true"
             rows="1"
             id="dataL">    
</p:dataTable>

<h:outputLabel id="anyComponenteID" value="Test"/>

我想应用这个功能,所以我试着让它“与denodeify兼容”。 但它没有按预期工作。 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

问题在于denodeify期望以标准方式调用您的回调,即callback(err, data)

但是你用callback(data)呼叫你回调,所以它将你的承诺置于拒绝状态,因为它认为你的数据实际上是错误,因此Promise.all失败

要解决此问题,您应修改addFood函数以调用此回调cb(undefined, data.id);

ps:你可以寻找&#34;节点风格的回调&#34;如果您想了解有关此回调样式的更多详细信息