我调用这个函数:
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)
});
}在我的控制器中...inside这个函数:
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()会打开承诺。这在没有异步/等待的情况下是可能的吗?
发布于 2018-04-11 08:18:51
不需要使用async/await。你可以像这样做你想做的事情:
router.get('/search/results', function(req, res) {
const searchResults = bing.bing_web_search(req.query.search_query);
searchResults.then(function(results) {
res.render('../views/results', {
test : results
});
});
});发布于 2018-04-11 11:51:55
假设你有一个查询数组,那么你可以像jfriend所说的那样使用Promise.all:
router.get('/search/results', function(req, res) {
Promise.all(
req.query.search_queries.map(//assuming you have an array of queries
query=>bing.bing_web_search(query)
)
).then(
results=>
res.render('../views/results', {
test : results
})
);
});Async await语法如下所示:
router.get('/search/results', async function(req, res) {
const results = await Promise.all(
req.query.search_queries.map(//assuming you have an array of queries
query=>bing.bing_web_search(query)
)
);
res.render('../views/results', {
test : results
})
});注意,两者都不会捕获任何错误(您的bing_web_search捕获错误并解析为undefined)。
https://stackoverflow.com/questions/49764580
复制相似问题