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