[英]Waiting for promises - code hangs
我第一次使用Javascript Promises,遇到了我不了解的东西。
我要尝试做的是创建一个验证阶段,该阶段将运行并检查事物-最终等待所有诺言解决。
为此,我创建了一个验证承诺:
validate = function(data) {
var p = new Promise(function(resolve, reject)){
在这里,我将为将要执行的所有不同操作定义一个promises数组:
var all_promises = Array();
现在,在将promise添加到该数组中的同时执行类似Sequelize调用的操作(Sequelize返回promise):
all_promises.push(resBooking);
resBooking.count(...).then(...).catch(...);
我有记录日志,表明我们到那时为止,一切都很好。 现在我所要做的就是等待!
Promise.all(all_promises).then(function(){
p.resolve();
});
但是,这个愚蠢的事情挂了-等待完成。 无CPU使用率。 我究竟做错了什么?
你想要的是
validate = function(data) {
var p = new Promise(function(resolve, reject)){
var all_promises = Array();
all_promises.push(resBooking);
resBooking.count(...).then(...).catch(...);
Promise.all(all_promises).then(resolve);
});
return p;
};
换句话说,调用resolve
,而不是p.resolve()
。 p.resolve
将生成一个运行时错误( p
不存在),该错误会被promise构造函数“吞噬”并导致失败。 但是,您甚至无法从外部看到被拒绝的承诺,因为您也不会从函数中返回它。
但是,尽管此代码现在应该可以使用,但是您仍在提交“ promise构造函数反模式”。 当您已经有了Promise.all
形式的承诺时,就不需要构造新的承诺。 所以你可以写
validate = function(data) {
var all_promises = Array();
all_promises.push(resBooking);
resBooking.count(...).then(...).catch(...);
return Promise.all(all_promises);
};
我不确定以上内容是否正是您想要的。 我不知道什么是resBooking
或resBooking.count
。 在任何情况下,你会被等候在resBooking
承诺,而不是的结果then
和catch
你挂吧。 根据您要完成的工作,您可能想要
validate = function(data) {
var all_promises = Array();
all_promises.push(resBooking.count(...).then(...).catch(...));
return Promise.all(all_promises);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.