【问题标题】:REST API calls using async await使用异步等待的 REST API 调用
【发布时间】:2018-03-31 06:25:43
【问题描述】:

这是我的代码 sn-p

var clients = require('restify-clients');

async function callApi(val){
        const client = clients.createJsonClient({ url: apiUrl });
        await client.get('/my/url', (err, req, res, obj) => {
            if (err) {
                return err;
            } else {
                return obj;
            }
        });
}

我尝试了几种调用它的方法,但它们都不起作用

第一种方式:

var results = await callApi(val);

第二种方式:

var results = callApi(val).then(data => {
                console.log(data);
            })

【问题讨论】:

    标签: javascript node.js promise async-await


    【解决方案1】:

    client.get 不返回承诺,你不能在不返回承诺的函数上使用await(老实说你可以,但这没有意义)。这里正确的解决方案是promisify client.get 并返回一个promise:

    function callApi(val) {
      const client = clients.createJsonClient({ url: apiUrl });
      return new Promise((resolve, reject) => {
        client.get('/my/url', (err, req, res, obj) => {
          if (err) {
            reject(err);
          } else {
            resolve(obj);
          }
        });
      });
    }
    
    // Usage
    let results = await callApi(val);
    

    【讨论】:

      【解决方案2】:

      尝试从结果中删除等待

      var results = callApi(val);
      

      【讨论】:

      • 不能。 callApiasync
      猜你喜欢
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      相关资源
      最近更新 更多