“() => Promise<string>”类型的参数不可分配给 'Promise<string>' 类型的参数。 TS(2345)
Argument of type '() => Promise<string>' is not assignable to parameter of type 'Promise<string>'. ts(2345)
我正在定义一个需要异步函数作为参数的函数:
async function handle(def: Promise<string>) {
// ...
const data = await def;
console.log(`data equals: ${data}`)
}
我可以通过一个承诺来成功执行它。
handle(new Promise(async (res, rej) => {
const data = await Promise.resolve("some data")
if (data == "invalid")
return rej("data is invalid")
res(data)
}))
我需要内部函数是异步的,因为我需要在内部执行等待。但是,我不喜欢 promise 中的异步,并在网上阅读 .
我认为摆脱 promise 并使用基本的异步函数是一个更好的主意:
handle(async () => {
const data = await Promise.resolve("some data")
if (data == "invalid")
throw "data is invalid"
return data
})
但是 TS 编译器报错:
Argument of type '() => Promise<string>' is not assignable to parameter of type 'Promise<string>'. ts(2345)
我认为 Promises 和异步函数在某种程度上可以互换。我读到异步函数 always return a promise。显然我没有正确解释这个,但我不确定错误告诉我什么。
我希望我正在勾画的问题很清楚。如果有人可以澄清错误或就如何以所需方式实施此错误提出建议,我们将不胜感激。非常感谢!
一般来说,在这种情况下使用 Promise 构造函数的时间是在您调用要承诺的 callback-based 函数时。但是在这里,看起来没有什么可以承诺的,所以 Promise 构造函数并没有真正帮助。
如果
I need the inner-function to be async, since I need to perform awaits inside.
您可以立即调用异步 IIFE - 是的,对 Promise 构造函数使用异步回调是不安全的,因为它不会处理错误。
handle((async () => {
const data = await Promise.resolve("some data")
if (data == "invalid")
throw "data is invalid";
return data
})())
另一种选择是使用 .then
- .then
在许多情况下可与 await
互换:
handle(
Promise.resolve("some data")
.then((data) => {
if (data == "invalid")
throw "data is invalid";
return data;
})
);
您的函数签名似乎不正确。
您将参数定义为 Promise<string>
,而您确实希望它是 () => Promise<string>
.
async function handle(def: () => Promise<string>) {
// ...
const data = await def();
console.log(`data equals: ${data}`)
}
我正在定义一个需要异步函数作为参数的函数:
async function handle(def: Promise<string>) {
// ...
const data = await def;
console.log(`data equals: ${data}`)
}
我可以通过一个承诺来成功执行它。
handle(new Promise(async (res, rej) => {
const data = await Promise.resolve("some data")
if (data == "invalid")
return rej("data is invalid")
res(data)
}))
我需要内部函数是异步的,因为我需要在内部执行等待。但是,我不喜欢 promise 中的异步,并在网上阅读
我认为摆脱 promise 并使用基本的异步函数是一个更好的主意:
handle(async () => {
const data = await Promise.resolve("some data")
if (data == "invalid")
throw "data is invalid"
return data
})
但是 TS 编译器报错:
Argument of type '() => Promise<string>' is not assignable to parameter of type 'Promise<string>'. ts(2345)
我认为 Promises 和异步函数在某种程度上可以互换。我读到异步函数 always return a promise。显然我没有正确解释这个,但我不确定错误告诉我什么。
我希望我正在勾画的问题很清楚。如果有人可以澄清错误或就如何以所需方式实施此错误提出建议,我们将不胜感激。非常感谢!
一般来说,在这种情况下使用 Promise 构造函数的时间是在您调用要承诺的 callback-based 函数时。但是在这里,看起来没有什么可以承诺的,所以 Promise 构造函数并没有真正帮助。
如果
I need the inner-function to be async, since I need to perform awaits inside.
您可以立即调用异步 IIFE - 是的,对 Promise 构造函数使用异步回调是不安全的,因为它不会处理错误。
handle((async () => {
const data = await Promise.resolve("some data")
if (data == "invalid")
throw "data is invalid";
return data
})())
另一种选择是使用 .then
- .then
在许多情况下可与 await
互换:
handle(
Promise.resolve("some data")
.then((data) => {
if (data == "invalid")
throw "data is invalid";
return data;
})
);
您的函数签名似乎不正确。
您将参数定义为 Promise<string>
,而您确实希望它是 () => Promise<string>
.
async function handle(def: () => Promise<string>) {
// ...
const data = await def();
console.log(`data equals: ${data}`)
}