异步函数未被识别为异步

埃尔帕内

我做了一个从服务器获取数据的函数

const http = require('node-fetch')

getProdData = async function(prodNum) {
    const response = await http(`https://www.xxxxxx.com/api/products/${prodNum}/`)
    const json = await response.json()
    console.log(json)
    return json
}

如果我直接调用它,它会返回一个挂起的承诺

const promise = getProdData(12)
console.log(promise) // this returns a {promise:pending} 

当我尝试等待它会引发错误

const data = await promise 
// this throws [SyntaxError: await is only valid in async function]
console.log(data)

我已经研究了几乎相同的代码并且正在工作的类似案例。

我可以错过什么吗?

jfriend00

所有的async函数都返回一个promise,一旦函数遇到第一个await语句,它们就会返回因此,在您调用该函数后,承诺将始终处于挂起状态。如果您想要该承诺的值,则必须使用await(在另一个async函数中)或.then()在承诺上使用async函数之外,它与常规的异步 promise 编程并没有什么不同。

Async/await 不会神奇地将异步编程变成同步编程。它们有助于在async函数内部更轻松地进行编程,但在async函数外部,它只是常规的异步 promise 编程。使用await.then()从承诺中获取价值。

而且,不要忘记正确的错误处理.catch()

 const getProdData = async function(prodNum) {
    const response = await http(`https://www.xxxxxx.com/api/products/${prodNum}/`)
    const json = await response.json()
    console.log(json)
    return json
}

getProdData(someNum).then(json => {
    // use the json in here
    console.log(json);
}).catch(err => {
    // handle errors here
    console.log(err);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

提取未识别为异步函数

无法将Node.js异步函数识别为有效的异步函数

错误:“ CONTAINS”未被识别为函数或过程

在 GLSL 函数中传递的参数未被识别为常量

$(window) 未被识别为窗口

“nx”未被识别为 cmdlet 的名称

常量未被识别为cmdlet的名称

我的新课程未被识别为活动

Terraform:模块输出未被识别为变量

术语“”未被识别为cmdlet的名称

术语“conda”未被识别为 cmdlet 的名称

Python 未被识别为 cmdlet 的名称

变量在javascript中未被识别为变量

Login-AzureRmAccount:术语“ Login-AzureRmAccount”未被识别为cmdlet,函数,脚本的名称

Python uvicorn:术语“ uvicorn”未被识别为cmdlet,函数,脚本文件的名称

术语“ az”未被识别为cmdlet,函数,脚本文件或可运行程序的名称

绝对值函数未被识别为 Disciplined Convex Program (CVXPY)

异步函数内部的异步函数

术语“New-AzureRmServiceBusNamespace”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称

术语 'OC_EDITOR="subl" 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称

go:术语“ go”未被识别为cmdlet,函数,脚本文件或可运行程序的名称

PowerShell:接收错误“术语‘...’未被识别为 cmdlet、函数、脚本文件或可运行程序的名称”

字符串日期函数中的“字符串未被识别为有效的日期时间格式”?

eb :术语“eb”未被识别为 cmdlet、函数、脚本文件或可运行程序的名称

'docker' 未被识别为内部或外部命令

术语“ Set-AzureKeyVaultKeyAttributes”未被识别为cmdlet的名称,

错误:未被识别为内部或外部命令

'wsimport' 未被识别为内部或外部命令

活动的“ this”在创建新的PagerAdapter时未被识别为回调