问题描述
我试图从函数返回 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();