【发布时间】:2019-10-07 01:34:16
【问题描述】:
当我运行下面的post() 函数时,我收到以下错误信息:
Type 'void' must have a '[Symbol.iterator]()' method that returns an iterator.
这是我要运行的内容:
static async post(options:object) {
const promise = postRequest(options)
const [err, data] = await this.promiseWapper(promise);
return [err, data]
}
static async promiseWapper(promise: any) {
return
promise()
.then((res: any) => [undefined, res])
.catch((err: any) => [err, undefined])
}
我怎样才能让这段代码正常运行?
【问题讨论】:
-
这还不够详细,无法提供有意义的帮助。 “postRequest”有什么作用?
-
promiseWrapper被标记为async但它不是await任何东西。你的意思是await是你返回的那个承诺的结果吗?或者也许只是删除async关键字? -
@StriplingWarrior 虽然这是真的,但这不一定是问题 - 如果异步函数返回 Promise,它们的行为相同。任何返回承诺但未标记为异步的函数,如果将其标记为异步,则其行为实际上是相同的
-
@TKoL:所以 JavaScript 会检测到你最终会得到一个 Promise 的 Promise 并解开它(或者可能只是一开始就避免包装它)?这就说得通了。它与
.then()的工作方式相得益彰。我习惯于从 C# 中异步/等待,您必须更明确地了解这些内容。 -
你的代码有多个问题:
promise不应该作为函数调用,它应该有类型Promise<any>not any,你不是returning 来自promiseWrapper的任何东西(由于ASI)所以它会有一个Promise<void>返回类型,你应该在你的函数中添加返回类型而不是依赖类型推断,你的promiseWrapper使用.then()/.catch()风格不应该是async。
标签: javascript typescript