![](/img/trans.png)
[英]How do I use an FB.api(JS SDK) response outside of the callback function?
[英]How can I use callback function for returning api response in node js
我是回調函數的新手。 實際上,我在節點js中使用請求模塊來獲取一些信息。 我很困惑如何返回我的響應,因為Javascript本質上是異步的。 我有以下代碼。 我的app.js
代碼如下:
var express = require('express');
var app = express();
const request = require('request');
var call = require('./method');
app.use(express.json());
app.post('/call', function(request, response){
var json = request.body;
var p1 = json.p1;
var p2 = json.p2;
var p3 = json.p3;
var p4 = json.p4;
call.callApi(p1, p2, p3, p4);
//response.send(request.body);
});
app.listen(3000);
我的函數文件名為method.js,如下所示:
const request = require('request');
function callApi(p1, p2, p3, p4, callback) {
var api = "http://test.roadcast.co.in:8088/api/route/" + p1 + "/" + p2 + "/" + p3 + "/" + p4;
console.log(api);
request(api, function(err, res, body) {
var result = body;
return callback(result, false);
//console.log(body);
//return result;
});
}
module.exports = {
callApi: callApi,
};
我通過在正文中發送json數據來請求POST請求,如下所示:
{ "p1":"28.7033129", "p2":"77.1542682", "p3":"28.709637", "p4":"77.291254" }
我的測試結果正確無誤,但我只想返回答復,請在出現問題的地方糾正我。
就像其他回調一樣。 在您的代碼中,您沒有為callback
參數傳遞任何內容。 如果這樣做,並使用其參數,則可以編寫響應。 最好不要在post
回調期間同步寫入響應(正常且完全正常)。
例如:
app.post('/call', function(request, response){
var json = request.body;
var p1 = json.p1;
var p2 = json.p2;
var p3 = json.p3;
var p4 = json.p4;
call.callApi(p1, p2, p3, p4, function(result) { // ***
response.send(result); // ***
}); // ***
});
就是說,您應該更改回調以匹配標准的Node回調樣式(或采用promises,這會更好):讓它傳遞錯誤或null
作為第一個參數,並將結果(如果有)作為第二個參數。 例如:
function callApi(p1, p2, p3, p4, callback) {
var api = "http://test.roadcast.co.in:8088/api/route/" + p1 + "/" + p2 + "/" + p3 + "/" + p4;
console.log(api);
request(api, function(err, res, body) {
return callback(err, body); // ***
});
}
然后
app.post('/call', function(request, response){
var json = request.body;
var p1 = json.p1;
var p2 = json.p2;
var p3 = json.p3;
var p4 = json.p4;
call.callApi(p1, p2, p3, p4, function(err, result) { // ***
if (err) { // ***
// Send error response // ***
// ... // ***
} else { // ***
// Send successful response // ***
response.send(result); // ***
} // ***
});
});
您只需要傳遞回調函數,就像您在callApi中調用回調函數一樣,但是您沒有將任何回調傳遞給callApi,但是請始終記住將err用作回調函數中的第一個參數。
例:
app.post('/call', function(request, response){
var json = request.body;
var p1 = json.p1;
var p2 = json.p2;
var p3 = json.p3;
var p4 = json.p4;
call.callApi(p1, p2, p3, p4, function(err,result) {
if(!err)
response.send(result);
else {
// do something
}
});
});
並且您的callApi函數應如下所示:
function callApi(p1, p2, p3, p4, callback) {
var api = "http://test.roadcast.co.in:8088/api/route/" + p1 + "/" + p2 + "/" + p3 + "/" + p4;
console.log(api);
request(api, function(err, res, body) {
var result = body;
//console.log(body);
if(!err)
callback(null,result);
else {
callback(err);
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.