JavaScript:链接了多个 promise 对象
JavaScript: Multiple promise objects being chained
工具:ES6 JavaScript
也许这都是肉汁。我只需要一个快速的同行评审来确保我没有做(某事 ugly/sinning)。
我从不同的模块中获取承诺,然后将它们链接起来。我找不到 链接多个 promise 对象的好例子(不要与使用顺序回调链接 promise 混淆) 所以语法让我感到困惑,因为我不确定我是否是否开始在句法上嵌套承诺。
我觉得 promise.all 应该在混合中,但是因为我有一些函数(回调,如果你愿意的话)来定义中间分层的成功和失败操作 - 使用 promise.all 在语法上令人困惑。
例如让我们得到 2 个承诺。我们完成第一个,然后调用第二个。如果他们都成功了 - 做一些成功的操作,否则失败的操作,最后用成功或失败的对象做一个完成回调用于引导:
bootStrapProgram = function(callback){
var promise1 = module1.getPromise1();
var promise2 = module2.getPromise2();
promise1.then(promise2.then(successOperation,failureOperation).then(callback));
}
successOperation = function(){
//Shoot out confetti or something I don't care.
}
failureOperation = function(){
//I dunno, Fire Le Missles!
}
Promise.all
不一定在语法上令人困惑,你正在做的可能是。您的代码表明 promise1 和 promise2 必须按该时间顺序处理,这不一定是真的。
var promise1 = foo.get(), promise2 = bar.get();
promise1.catch(failure1Fn);
promise2.catch(failure2Fn);
Promise
.all([promise1, promise2])
.then(bothSucceededFn);
现在您保留了单独的错误处理,但处理了所有成功的情况。不要忘记,仅仅因为您在 Promises 数组上调用 Promise.all
并不意味着您也不能单独处理每个 Promises。
如果您真的不需要单独的错误处理,那么只需
Promise
.all([promise1, promise2])
.then(bothSucceededFn)
.catch(failureFn);
如果您只想知道这两个操作何时完成,那么您可以这样做:
var promise1 = module1.getPromise1();
var promise2 = module2.getPromise2();
Promise.all(promise1, promise2).then(function() {
// success here
}, function(reason) {
// error here
});
如果你想运行一个操作在另一个操作之前,那么你可以像这样序列化它们:
module1.getPromise1().then(function(value1) {
return module2.getPromise2();
}).then(function(value2) {
// success here
}, function(reason) {
// error here
});
工具:ES6 JavaScript
也许这都是肉汁。我只需要一个快速的同行评审来确保我没有做(某事 ugly/sinning)。
我从不同的模块中获取承诺,然后将它们链接起来。我找不到 链接多个 promise 对象的好例子(不要与使用顺序回调链接 promise 混淆) 所以语法让我感到困惑,因为我不确定我是否是否开始在句法上嵌套承诺。
我觉得 promise.all 应该在混合中,但是因为我有一些函数(回调,如果你愿意的话)来定义中间分层的成功和失败操作 - 使用 promise.all 在语法上令人困惑。
例如让我们得到 2 个承诺。我们完成第一个,然后调用第二个。如果他们都成功了 - 做一些成功的操作,否则失败的操作,最后用成功或失败的对象做一个完成回调用于引导:
bootStrapProgram = function(callback){
var promise1 = module1.getPromise1();
var promise2 = module2.getPromise2();
promise1.then(promise2.then(successOperation,failureOperation).then(callback));
}
successOperation = function(){
//Shoot out confetti or something I don't care.
}
failureOperation = function(){
//I dunno, Fire Le Missles!
}
Promise.all
不一定在语法上令人困惑,你正在做的可能是。您的代码表明 promise1 和 promise2 必须按该时间顺序处理,这不一定是真的。
var promise1 = foo.get(), promise2 = bar.get();
promise1.catch(failure1Fn);
promise2.catch(failure2Fn);
Promise
.all([promise1, promise2])
.then(bothSucceededFn);
现在您保留了单独的错误处理,但处理了所有成功的情况。不要忘记,仅仅因为您在 Promises 数组上调用 Promise.all
并不意味着您也不能单独处理每个 Promises。
如果您真的不需要单独的错误处理,那么只需
Promise
.all([promise1, promise2])
.then(bothSucceededFn)
.catch(failureFn);
如果您只想知道这两个操作何时完成,那么您可以这样做:
var promise1 = module1.getPromise1();
var promise2 = module2.getPromise2();
Promise.all(promise1, promise2).then(function() {
// success here
}, function(reason) {
// error here
});
如果你想运行一个操作在另一个操作之前,那么你可以像这样序列化它们:
module1.getPromise1().then(function(value1) {
return module2.getPromise2();
}).then(function(value2) {
// success here
}, function(reason) {
// error here
});