首页 > 解决方案 > 如何确保承诺已解决

问题描述

如何确保在我的配置文件中解决了一个承诺。例如,我的配置如下所示。

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. 

标签: javascriptasync-await

解决方案


你可以这样做,node fetch 实际上有一个内置函数用于将响应转换为 JSON,但它不会像 Axios 和 SuperAgent 那样自动完成。这个库的最新版本使用了 Promise,所以我们也可以使用 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);
  }
})();

推荐阅读