函数调用不是第一次返回值



我创建了函数来从第三方 rest API 获取响应,但是当我从另一个 js 文件调用它时,它第一次不会返回值。 如果我再次点击它,那么它会获取值。

我尝试使用回调、异步/AWIT、请求承诺来解决问题,但无法解决。

索引.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')
});

请求处理程序.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);
}
}

它应该每次都获取数据,而不是在第一次尝试后。

我想是因为您将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);
}
});

包含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. 

最新更新