我需要并行获取数据,然后使用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兼容”。 但它没有按预期工作。 任何帮助将不胜感激
答案 0 :(得分:3)
问题在于denodeify
期望以标准方式调用您的回调,即callback(err, data)
但是你用callback(data)
呼叫你回调,所以它将你的承诺置于拒绝状态,因为它认为你的数据实际上是错误,因此Promise.all
失败
要解决此问题,您应修改addFood
函数以调用此回调cb(undefined, data.id);
ps:你可以寻找&#34;节点风格的回调&#34;如果您想了解有关此回调样式的更多详细信息