Kat*_*oak 0 javascript node.js promise
我第一次使用Javascript Promises并遇到了一些我不理解的东西.
我想要做的是创建一个验证阶段,它运行并检查事情 - 最终等待所有承诺解决.
为此,我创建了一个验证承诺:
validate = function(data) {
var p = new Promise(function(resolve, reject)){
Run Code Online (Sandbox Code Playgroud)
在这里,我为所有不同的事情定义一个promises数组:
var all_promises = Array();
Run Code Online (Sandbox Code Playgroud)
现在做这样的Sequelize调用,同时将promises添加到这个数组中(Sequelize返回promises):
all_promises.push(resBooking);
resBooking.count(...).then(...).catch(...);
Run Code Online (Sandbox Code Playgroud)
我有记录声明,证明我们已经通过,一切都很花哨.现在我需要做的就是等待!
Promise.all(all_promises).then(function(){
p.resolve();
});
Run Code Online (Sandbox Code Playgroud)
但这个愚蠢的事情仍然悬而未决 - 等待一些事情要完成.没有CPU使用率.我究竟做错了什么?
小智 5
你想要的是什么
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;
};
Run Code Online (Sandbox Code Playgroud)
换句话说,打电话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);
};
Run Code Online (Sandbox Code Playgroud)
不过,我不确定上述内容是否符合您的要求.我不知道是什么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);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2256 次 |
| 最近记录: |