函数调用第一次不返回值

时间:2019-08-28 08:56:01

标签: node.js rest

我已经创建了从第三方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);
}
}

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

2 个答案:

答案 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.