函数内部的nodejs回调函数->如何返回结果

时间:2018-08-13 10:55:08

标签: node.js

我想创建一个用于调用API的函数。如果我执行“ apifunc”,该函数将调用api。 API执行完成后,结果将保存在“ body”中。现在,我希望函数返回“ body”。但事实并非如此。控制台确实打印出了“正文”。因此api起作用了。这里的问题是返回。我该如何解决这个问题。

exports.apifunc=function(a,b){
var request = require('request'); 
request.post(`https://abc.co.kr/api/${address}`,
{ json: {A:`${a}`, B: `${b}`} },
function (error, response2, body) {
  if (!error && response2.statusCode == 200) {
    console.log(body);
    return body;
  }
 });
}

1 个答案:

答案 0 :(得分:1)

欢迎来到异步编程,伙计!

您正在使用回调样式,这意味着您应该在请求回调内执行所有进一步的操作,如果您要对初始请求的结果进行异步处理,则应做得越来越深。

我的可靠建议是使用请求承诺库和异步/等待流。看:

const request = require('request-promise');

exports.apifunc= async (a,b) => {
  const body = await request.post(
    `https://abc.co.kr/api/${address}`,
    { json: { A:`${a}`, B: `${b}`} }
  );

  return body;
}

在这里不要忘记两件事。需要进行错误处理(尝试/捕获),并且该异步函数返回Promise。因此,使用api函数的外部函数应该是 async (异步),以便在那里等待身体,或者期望Promise并通过继续Promise链。然后