"无法阅读财产'然后'虽然返回了一个承诺,但未定义"

时间:2017-02-26 00:35:33

标签: javascript node.js asynchronous promise

我面对的似乎是一个常见的问题,然而,我真的无法弄清楚如何解决它。

我调用一个函数发出一个GET请求,解析返回的JSON,然后(据说)返回一个Promise,我用它来打印解析的JSON数据。但是,当我尝试这样做时,我收到了此问题标题中描述的错误。我有两个文件,我正在使用。第一个简单地从第二个函数调用一个函数,并尝试打印返回值(并获取错误)。

第一档:

var secondFile = require('./test');
secondFile.testFunc("some stuff").then(function(res) {
    console.log(res);
})

第二个文件(test.js):

module.exports = {
    testFunc : function(address) {
        var params = {
            q: address,
            format: "json"
        }
        var baseUrl = "http://google.com";
        rp({url: baseUrl,
            qs: params,
            method: "GET"})
            .then(function(body) {
                var parsedBody = JSON.parse(body);
                var result = {one: parsedBody[0], two: parseBody[1]};
                return new Promise(function(resolve, reject) {
                    resolve(result);
                });
            }).catch(function(err) {
                console.log(err);
            });
    }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

testFunc没有return语句,因此返回undefined

如果您想获取rp的返回值(似乎是一个承诺)然后从testFunc返回,那么您需要添加return语句。

    return rp({url: baseUrl,