我无法正确使用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