首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在不使用async/await的情况下“解开”Axios给出的这个承诺吗?

我可以在不使用async/await的情况下“解开”Axios给出的这个承诺吗?
EN

Stack Overflow用户
提问于 2018-04-11 08:16:38
回答 2查看 670关注 0票数 0

我调用这个函数:

代码语言:javascript
复制
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这个函数:

代码语言:javascript
复制
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()会打开承诺。这在没有异步/等待的情况下是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2018-04-11 08:18:51

不需要使用async/await。你可以像这样做你想做的事情:

代码语言:javascript
复制
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
        });
    });

});
票数 1
EN

Stack Overflow用户

发布于 2018-04-11 11:51:55

假设你有一个查询数组,那么你可以像jfriend所说的那样使用Promise.all

代码语言:javascript
复制
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语法如下所示:

代码语言:javascript
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49764580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档