2017-10-19 173 views
1

這裏是我的代碼片段REST API調用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); 
      }) 

回答

5

client.get刪除的await不會返回一個承諾,你不能在沒有返回一個承諾的功能使用await(老實說,你可以,但它沒有任何意義)。這裏的正確的解決方案是promisifyclient.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); 
0

試試從結果

var results = callApi(val); 
+0

不能。 'callApi'是'async' – nilobarp