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中不会改变这一点。