我在结果方面有两个相同的功能:
const p1 = async () => {
return 1;
};
const p3 = new Promise((resolve, reject) => {
resolve(1);
});
console.log(typeof p1.then);
console.log(typeof p3.then);
我原本预计两者都会转变为#34;然后"财产,但似乎他们没有:
但是vs-code的intellisense指出它们都是承诺:
如果我们明确了解 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)
会好的,但是它抱怨测试没有&#34; .then&#34;。有人能帮助我理解我思考的缺陷吗?
答案 0 :(得分:4)
嗯,首先,不,p1
和p3
不一样。 p3
是Promise
,因此它有一个then
方法。但是p1
是一个函数,它返回一个promise ,所以它不是一个promise,而是一个函数,因此没有then
属性,就像在{ {1}} const p4 = () => 5
是一个函数,而不是p4
。
实际上,您的number
函数要求您传递返回delayed
的函数,但我不确定原因。是不是更容易通过Promise
本身?但是,无论如何,您的Promise
函数与test
的类型不匹配。为什么呢?
因为,在你的定义中:
delayedPromise
您应该将delayedPromise: () => Promise<T> // a function that returns Promise<T>
const test = () => async() => 1; // a function that returns a function that returns a Promise
定义为
test
希望这会对你有所帮助。
答案 1 :(得分:1)
为什么异步函数中没有“then”
异步函数在调用时返回一个承诺(它们本身不是承诺)。该承诺具有then
属性。