javascript - 如何确保承诺已解决
问题描述
如何确保在我的配置文件中解决了一个承诺。例如,我的配置如下所示。
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.
解决方案
你可以这样做,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);
}
})();
推荐阅读
- javascript - mediaRecorder.requestData() 触发的损坏 Blob
- java - java.lang.ClassCastException:Activity 不能转换为 MainActivity
- python - Python - Web 抓取 - 受 Kerberos HTTP SPNEGO 保护的 URL
- list - Scheme / Racket : 用 map 和 lambda 转置列表
- python - Python:如何循环列表并附加到新列表
- angular - 我如何将令牌添加到 http get request to rest api
- java-8 - 基于多个值对地图进行排序(Java8/Jooq)
- json - '[错误] 无法在 CWD 中找到或读取“package.json”。“release-react”命令必须在 React Native 项目文件夹中执行。
- python - 将带有键和值的字符串转换为python dict的最有效方法
- python - 填充numpy数组中的相邻元素