Node.js 如何等待nodejs请求承诺对象

Node.js 如何等待nodejs请求承诺对象,node.js,request,request-promise,Node.js,Request,Request Promise,我试图从函数返回http请求的结果,并认为请求承诺应该在等待后返回。我显然没有这个权利。我从函数返回“未定义” 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) {

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

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返回数据

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

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现在刚刚返回[对象承诺]。。。为什么现在不起作用?

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

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

rp(url)
变为
return rp(url)
,然后您可以等待
getUrl()
(只要从异步函数调用
getUrl
)太棒了!这是可行的,但我不完全明白为什么需要从异步函数调用getUrl。我只是把它包装成异步函数xx(){s=await-getUrl),然后调用xx(),我想你也需要
sRtn=await-getUpdate(o)
。当使用async/await时,你必须一直使用它,或者求助于使用回调。async/await实际上是语法上的糖分,而不是使用。then()。如果不使用,则无法从异步/await转换为非异步/await。因此,您最好将其全部设置为异步/await Ironcito:我可以等待,因为它不在异步函数中。凯文:好的,但我可以调用xx()我正试图在exports.askVelo中的nodejs模块中实现这一点,它不能是异步的。那么,如何从askVelo中获取数据呢?