[英]how do I access a value returned by a promise inside promise
是否可以在promise之外访问result2的值。 如果是,我该怎么做
例
someFile1.someFunction1(req).then((result1)=>{
.
.
.
.
someFile2.someFunction2(req).then((result2)={
return(result2);
});
return(result1+result2);
})
注意 :我假设它们嵌套是有原因的。 否则,请使用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));
不,这是不可能的,因为在return
语句的位置,Promise可能尚未解决,因为它是异步的。 您可以做的是利用Promise.all
返回另一个处理其他两个结果的Promise.all
。 仅当promise2不需要嵌套在promise1中时,此解决方案才有效。 如果确实需要嵌套,请查看TJ Crowder提供的解决方案。
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));
您始终可以将异步函数作为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);
}
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.