我想创建一个用于调用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;
}
});
}
答案 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链。然后