JavaScript承诺的最佳实践

时间:2014-12-05 15:53:52

标签: javascript promise

return makeFirstPromise()
    .then(function(res1) {
       (...)
    })
    .then(function(res2) {
       (...)
    })
    .then(function(res3) {
        // **here I need to access res1**
    });

我想知道当我需要在我的承诺链的后续功能中访问先前的承诺结果时是否有最佳实践。

我看到两种可能的解决方案:

var r1;
return makeFirstPromise()
    .then(function(res1) {
       r1 = res1;
       (...)
    })
    .then(function(res2) {
       (...)
    })
    .then(function(res3) {
        console.log(r1);
    });

或者在第一个之后嵌套promises,但它在视觉上打破了链序列:

return makeFirstPromise()
    .then(function(res1) {
       (...)
       return secondPromise(res2)
           .then(function(res3) {
               console.log(res1);
           });
    });

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

承诺语法被设想为be used in the first way。第二种语法非常快速混乱 但不要忘记将结果传递给下一个承诺。

var r1;
return makeFirstPromise()
    .then(function(res1) {
       r1 = res1;
       (...)
       return r1;
    })
    .then(function(r1) {
       (...)
    });

答案 1 :(得分:2)

从概念上承诺代理值,将它们与值一起使用的最简单方法是将它们用作代理。这就是他们的抽象:

var res1 = makeFirstPromise();
var res2 = res1.then(makeSecondPromise);
Promise.all([res1, res2]).spread(function(firstResult, secondResult){
    // access both here, no nesting or closure hacks required.
});