使用async等待的REST API调用

Nul*_*nce 1 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;
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法来调用它,但它们都没有用

第一种方式:

var results = await callApi(val);
Run Code Online (Sandbox Code Playgroud)

第二种方式:

var results = callApi(val).then(data => {
                console.log(data);
            })
Run Code Online (Sandbox Code Playgroud)

ale*_*mac 7

client.get不返回承诺,你不能使用await不返回承诺的功能(老实说,你可以,但它没有意义).这里正确的解决方案是宣传 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);
Run Code Online (Sandbox Code Playgroud)