我已经创建了从第三方rest api获取响应的函数,但是当我从其他js文件调用它时,它第一次不会返回值。如果我再次点击它,它将获取值。
我尝试使用回调,异步/主动,请求承诺来解决该问题,但无法解决。
index.js
const express = require('express');
const bodyParser = require('body-parser');
const reqHand = require("./request-handler");
var strAssigneeID = "";
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
//var routes = require('./routes.js')(app);
app.get("/", function(req, res) {
res.send("Hello World!");
});
app.get("/isValidUser", function(req, res){
strAssigneeID = reqHand.getAssigneeID('fred.luddy');
console.log('In route: ' + strAssigneeID);
res.send(strAssigneeID);
});
app.listen(8080, function() {
console.log('Server is running on port: 8080')
});
request-handler.js
const express = require("express");
const request = require("request");
const bodyParser = require("body-parser");
var retBody = "";
module.exports = {
getAssigneeID: function(username) {
var options = {
baseUrl: 'www.something.com',
method: 'GET',
uri: '/api/test/',
json: true,
headers: {
'User-Agent': 'Request'
},
auth: {
'user': 'user',
'pass': 'password',
sendImmediately: true
}
};
request(options, function(err, ressponse, body) {
if(!err && ressponse.statusCode==200) {
retBody = body;
} else {
console.log('Error: ' + err);
}
});
console.log('In Request:' + retBody);
return (retBody);
}
}
它应该每次都获取数据,而不是在第一次尝试之后。
答案 0 :(得分:0)
我认为是因为您将response
单词拼写为ressponse
request(options, function(err, ressponse, body)
// Correct your spelling of response
{
if(!err && ressponse.statusCode==200) {
retBody = body;
} else {
console.log('Error: ' + err);
}
});
答案 1 :(得分:0)
包含retBody
的return语句在请求返回响应之前正在执行,因为return语句在回调函数之外。按照下面的代码片段所示移动return语句,它应该可以工作
request(options, function(err, ressponse, body) {
if(!err && ressponse.statusCode==200) {
retBody = body;
// Move the return here
console.log('In Request:' + retBody);
return (retBody);
} else {
console.log('Error: ' + err);
}
});
console.log('In Request:' + retBody);
// return (retBody); <<<< Move this to inside the if statement.