【发布时间】:2018-04-12 00:43:12
【问题描述】:
我调用这个函数:
let bing_web_search = function(search) {
let searchEncoded = encodeURIComponent(search);
return axios.get(
'https://api.cognitive.microsoft.com/bing/v7.0/search?q=' + searchEncoded + '+site:https://docs.microsoft.com/en-us/azure/&mkt=en-us', {
headers: { 'Ocp-Apim-Subscription-Key' : process.env.BING_SUBSCRIPTION_KEY }
})
.then(function(response) {
return response.data.webPages;
})
.catch(function(error) {
console.log(error)
});
}
...在我的控制器中的这个函数内:
router.get('/search/results', async function(req, res) {
let searchResults = bing.bing_web_search(req.query.search_query);
let test = await searchResults.then(function(results) {
return results
});
res.render('../views/results', {
test : test
});
})
我没有看到必须在 Axios 文档中使用 async/await,而且没有它们我无法让它工作。我不断收到Promise { pending},因此我使用then() 两次认为第二个then() 会解开承诺。没有异步/等待这可能吗?
【问题讨论】:
-
Async 和 await 只是对 Promise 的语法糖。仅当您确实需要时才可以使用
.then重写代码,但它实际上不会实现您无法做到的任何事情。 -
要小心,因为您的
.catch()处理程序正在“吃掉”错误并将拒绝的承诺更改为具有undefined已解决值的已解决承诺。如果你想记录一个错误,然后重新抛出,例如.catch(err => { console.log(err); throw err;});以保持 Promise 被拒绝。 -
查看您的调用代码,我不知道
test最终会变成undefined之外的任何东西
标签: javascript promise axios