我如何访问Promise中的Promise返回的值

时间:2018-11-14 16:37:49

标签: javascript node.js

是否可以在promise之外访问result2的值。如果可以,我该怎么办

示例

someFile1.someFunction1(req).then((result1)=>{
.
.
.
.

    someFile2.someFunction2(req).then((result2)={
        return(result2);
    });

    return(result1+result2);

})

3 个答案:

答案 0 :(得分:4)

注意:我假设它们是出于某种原因嵌套的。否则,请使用Promise.all并行运行它们,并在解析后加总收到的数组。

如果我假设您的代码确实像所示的那样,.并没有引入太多的复杂性,则有两种方法,但是该示例中最简单的方法可能是仅嵌套promise处理程序:

someFile1.someFunction1(req)
.then((result1) => {
    return someFile2.someFunction2(req)
        .then((result2) => {
            return result1 + result2;
        });
})
.then(combined => {
    // Use the combined result
});

或带有简洁箭头功能:

someFile1.someFunction1(req)
.then(result1 =>
    someFile2.someFunction2(req).then(result2 => result1 + result2)
)
.then(combined => {
    // Use the combined result
});

当然,也可以使用async函数和await

const result1 = await someFile1.someFunction1(req);
const result2 = await someFile2.someFunction2(req);
const combined = result1 + result2;

甚至

const combined = (await someFile1.someFunction1(req)) + (await someFile2.someFunction2(req));

答案 1 :(得分:0)

不,这是不可能的,因为在return语句的位置,Promise可能尚未解决,因为它是异步的。您可以做的是利用Promise.all返回另一个处理其他两个结果的Promise。仅当promise2不需要嵌套在promise1中时,此解决方案才有效。如果确实需要嵌套,请查看T.J.人群。

function combinePromises() {
  var promise1 = Promise.resolve(3);
  var promise2 = Promise.resolve(42);

  var promise3 = Promise.all([promise1, promise2]).then(([result1, result2]) => result1 + result2);
  return promise3;
}
var resultPromise = combinePromises();
resultPromise.then(finalResult => console.log(finalResult));

答案 2 :(得分:-1)

您始终可以将异步函数作为Promise回调传递:

const doSomething = function(someData) = {
  return new Promise(async (resolve, reject) => {
    try {
      const result1 = await somePromise(someData);
      const result2 = await someOtherPromise(result1);

      resolve(result1 + result2);
    } catch (ex) {
      reject(ex);
    }
  });
};