我如何等待 nodejs request-promise 对象

问题描述

我试图从函数返回 http 请求的结果,并认为 request-promise 应该在等待后返回。我显然没有这个权利。我从函数返回“未定义”。

var s = getUrl();
console.log('result: ' + s)

function getUrl() {
    var rp = require('request-promise');
    var url = 'http://myserver.com?param=xxx';
    rp(url)
    .then(function (data) {
        return data;
    })
    .catch(function (err) {
        console.log(err);
    });
}

如何等待调用以便 getUrl 返回数据?

编辑:在凯文的评论之后。我试图将它放入一个模块并调用它,但它返回 [object Promise]。

function getUrl(url,params) {
    var rp = require('request-promise');
    return rp(url + '?' + params)
    .then(function (data) {
        return data;
    })
    .catch(function (err) {
        console.log(err);
    });
}


async function getUpdate(o) {
    var url = 'http://myserver.com';
    var params = 'param=xxx';
    var s = await getUrl(url,params);
    return s;
}

exports.askVelo = (o) => {
    var sRtn = '';
    
    console.log(o.code);

    switch (o.code) {
        case 'g':
            sRtn = getUpdate(o);
            break;
    }

    console.log('heres rtn: ' + sRtn);  // sRtn is [object Promise]
    return sRtn;
}

getUpdate 现在只是返回 [object Promise]...为什么现在不起作用?

解决方法

我真的需要以同步方式获取数据,所以我最终放弃并使用了同步请求并跳过了所有等待/承诺的东西。

    sr = require('sync-request');
    var url = 'http://myserver';
    var qstring = 'param=xxx';
    var res = sr('GET',url + '?' + qstring);
    var str = res.body.toString();