Javascript 如何确保承诺得到解决
如何确保已在配置文件中解析承诺。例如,我的配置如下所示Javascript 如何确保承诺得到解决,javascript,async-await,Javascript,Async Await,如何确保已在配置文件中解析承诺。例如,我的配置如下所示 const fetch = require("node-fetch"); const fetchToken = async () => { return await fetch('www.token-endpoint.com', { method: "POST", headers: { ContentType: "app
const fetch = require("node-fetch");
const fetchToken = async () => {
return await fetch('www.token-endpoint.com', {
method: "POST",
headers: {
ContentType: "application/x-www-form-urlencoded",
},
body: new URLSearchParams({
secret: "this is a secret",
})
})
}
const ACCESS_TOKEN = fetchToken()
.then((res) => { return res.json() })
.then(...)
// And so on
// Now I want my promise to definitely resolve
module.exports = {
accessToken: ACCESS_TOKEN // This will be undefined unless my promise has resolved
}
在此之后,我想使用令牌
const config = require("./config")
// Use config.accessToken knowing it is well defined.
您可以这样做,节点获取实际上 一个内置函数,用于将响应转换为JSON,但它不会像Axios和SuperAgent那样自动执行。此库的最新版本使用promises,因此我们也可以使用async/await语法:
const fetch = require('node-fetch');
(async () => {
try {
const response = await fetch('www.token-endpoint.com')
const json = await response.json()
console.log(json.url);
console.log(json.explanation);
} catch (error) {
console.log(error.response.body);
}
})();
您缺少wait
const-ACCESS\u-TOKEN=wait-fetchToken()。然后((res)=>{return res.json()})
@epascarello-SyntaxError:wait仅在异步函数中有效尝试导出fetchToken
方法而不是尝试解析和导出,您可以始终在调用站点等待它,但不能直接进行。您可能有一些先前调用的init函数,或者返回一个承诺。@epascarello使用wait there是没有用的,如果OP不使用then/catch语法,它是有用的。这不是OP遇到的问题。他问如何确保承诺得到解决,这显示了如何从异步调用返回响应。您可能会误解这一点,const config=require(“./config”)
。这仍然不起作用,将代码放在IIFE中不会改变这一点。