У меня есть две идентичные функции с точки зрения результата:
const p1 = async () => {
return 1;
};
const p3 = new Promise((resolve, reject) => {
resolve(1);
});
console.log(typeof p1.then);
console.log(typeof p3.then);
Я бы ожидал, что оба получат свойство "тогда", но, похоже, они этого не сделают:

Но, тем не менее, intellisense vs-code отмечает их как обещания:


и мы можем даже гарантировать, что тип возвращаемого значения будет таким же, если мы явно укажем p3 :

Теперь я думаю по определению Обещание "тогда в состоянии ", верно? Причина, по которой я забочусь, заключается в том, что у меня в Typescript есть интерфейс из следующей функции:
export const DELAYED = "WAIT_IN_PARALLEL_DELAYED";
export function delayed<T = any>(delayedPromise: () => Promise<T>) {
return {
delayed: DELAYED,
start(resolve, reject) {
delayedPromise()
.then(resolve)
.catch(reject);
}
};
}
Я бы подумал передать:
const test = () => async() => 1;
для функции delayed(test)
было бы хорошо, но вместо этого он жалуется, что тест НЕ имеет ".then". Может ли кто-нибудь помочь мне понять недостаток моего мышления?