我了解到异步函数本身会返回Promise。我想知道如何作为已解决的异步函数Promise(可以说是嵌套Promise)的结果返回另一个Promise。如果不可能的话,我对此感兴趣。
下面是一些缺少某些对象属性的示例代码。
function B() {
return new Promise((resolve) => {
setTimeout(() => resolve('B resolved'), 10);
})
}
async function A() {
const result = new Promise((resolve) => { setTimeout(() => resolve('A resolved'), 30); });
result.test = 'test';
result.b = await B();
return result;
}
const a = A();
console.log('a.b', a.b); // expected undefined, correct
console.log('test1', a.test); // expected undefined, correct
a.then((a_data) => {
console.log('a_data', a_data); // expected Promise constructed in A(), actually 'A resolved'
console.log('a_data.b', a_data.b); // expected 'B resolved', actually undefined
console.log('a_data.test', a_data.test); // expected 'test', actually undefined
// this code expected to be allowed, but .then is not a member of a_data since it's not a promise
// a_data.then((data) => {
// console.log(data); // expected 'A resolved'
// });
});
我还理解,在大多数情况下,最好等待A()中定义的Promise在提供结果之前解决,但是,这并不是我要寻找的答案。
只要结果不是Promise,“结果”对象就会按预期返回,否则将解决“结果”承诺,并且丢失额外的属性“ test”和“ b”。
答案 0 :(得分:0)
您正在将它们添加到Promise对象上,当它得到解决时,它仅返回从已解决函数返回的值,因此您丢失了test
和b
,如果需要test
和{ {1}}对于从承诺对象返回的值,您需要从resolve函数返回它们。
b