是否可以在promise之外访问result2的值。如果可以,我该怎么办
示例
someFile1.someFunction1(req).then((result1)=>{
.
.
.
.
someFile2.someFunction2(req).then((result2)={
return(result2);
});
return(result1+result2);
})
答案 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);
}
});
};