使用async等待的REST API调用

时间:2017-10-19 08:52:19

标签: javascript node.js promise async-await

这是我的代码段

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);
            })

2 个答案:

答案 0 :(得分:7)

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

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);

答案 1 :(得分:0)

尝试从结果中删除等待

var results = callApi(val);