我無法正確使用JS中的承諾,看起來像什麼。如何有效地使用JS Promisses?
我有3個異步相互依賴的功能,像這樣:
的func1,func2函數和FUNC 3.
- func1的返回FUNC2用途的單個結果。
- func2還返回單個結果
- func3使用func1和func2的結果。
所以func3必須等待func1和2,而func2只能等待func1。
這裏是JS小提琴,我可以編寫,它的工作原理,但閱讀3一起使用的混亂只是一個nighmare。什麼是執行這種連鎖經營的正確方法?
function func1() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(10);
}, 1000);
});
}
function func2(return1) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(return1 + 20);
}, 1000);
});
}
function func3(val1, val2) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(val1 + val2);
}, 1000);
});
}
func1().then(function(result) {
func2(result).then(function(result2) {
func3(result, result2).then(function(finalResult) {
console.log(finalResult);
}, function(err) {
console.log(err);
});
});
}).catch(function(err) {
console.log(err);
});
我投票結束這個問題作爲題外話,因爲如何改進/重新設計工作代碼的建議請求屬於CodeReview。stackexchange.com。 – Barmar
我不確定還有很大的改進空間。我沒有看到多餘的代碼,它直接表達了設計要求。你是否需要對N個函數進行概括,每個函數都需要得到所有前面函數的結果? – Barmar
您可能也對此感興趣[如何鏈接並與承諾共享先前的結果](http://stackoverflow.com/questions/28714298/how-to-chain-and-share-prior-results-with-promises/28714863 #28714863)。這涵蓋了在鏈接承諾時訪問多個先前結果的各種選項。 – jfriend00