我做了一个从服务器获取数据的函数
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)
我已经研究了几乎相同的代码并且正在工作的类似案例。
我可以错过什么吗?
所有的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] 删除。
我来说两句