Я понимаю, что функции asyn c изначально возвращают Promise. Я хотел бы знать, как вернуть еще одно обещание в результате разрешенного обещания функции asyn c (так сказать, вложенного 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 (), прежде чем предоставлять результат, однако это не ответ Я ищу.
Объект 'result' возвращает ожидаемый результат, если он не является Promise, в противном случае обещание 'result' разрешается, а дополнительные свойства 'test' и 'b' теряются. .