Nic*_*eda 3 javascript promise ecmascript-6 es6-promise
我需要在一个userID
承诺链中间放入一个参数(这是唯一需要它的承诺).所有承诺都应以同步顺序执行.
SideNote- stackoverflow上的所有类似示例都有点不同 - 比如使用lambda函数(我使用声明的函数).所以我仍然不太确定.
var initialize = function(userID) {
var firstPromise = Module2.getFirstPromise();
firstPromise.then(getSecondPromise)
.then(getThirdPromise)
.then(getFourthPromise) //<----Fourth promise needs userID
.then(getFifthPromise)
.then(Utils.initializeComplete);
}
Run Code Online (Sandbox Code Playgroud)
所有承诺都是这样的函数:
var thirdPromise = function() {
return new Promise(function(resolve, reject) {
//fetch data
//On Return, Store it
resolve() //Nothing needed to passed down from this promise
});
});
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试这个,它"有效",但我不确定这是不是我"假设"处理这样的事情.:)
var initialize = function(userID) {
var firstPromise = Module2.getFirstPromise();
firstPromise.then(getSecondPromise)
.then(getThirdPromise)
.then(function(){ return fourthPromise(userID)})
.then(getFourthPromise)
.then(Utils.initializeComplete);
}
Run Code Online (Sandbox Code Playgroud)
注意:getFirstPromise
来自我的代码中的不同模块.这不应该是问题的重要:)
假设这firstPromise
实际上是一个承诺,但secondPromise
实际上是返回承诺的函数,那么是的,你所做的就是你应该如何做到这一点.以下是Babel的REPL的实例,如下所示:
function doSomething(userID) {
getFirstPromise()
.then(getSecondPromise)
.then(getThirdPromise)
.then(() => getFourthPromise(userID))
// Or .then(function() { return getFourthPromise(userID); })
.then(getFifthPromise)
.catch(err => {
console.log("Error: " + err.message);
});
}
doSomething("foo");
function getFirstPromise() {
console.log("getFirstPromise called");
return new Promise(resolve => {
setTimeout(() => {
resolve("one");
}, 0);
});
}
// and then second, third, fourth (with user ID), and fifth
Run Code Online (Sandbox Code Playgroud)
(如果您不使用箭头功能,只需将其替换为function
表单.)
请注意catch
上面的示例中的内容.除非你有充分的理由不这样做,否则一个承诺链应该总是有一个.catch
如果你没有return
结果.