我试图调用REST调用并返回一个promise,这样我就可以操作数据了。
var self = this;
var returnPromise;
returnPromise = self.httpService.testService();
returnPromise.then(function(result){
console.log(result);
});
我的REST服务位于的另一个文件中,其中包含以下内容:
testService() {
console.log("start of testService");
var request = require('request');
var user = "test";
var ipadd = "127.0.0.1";
request({
url: 'https://' + 'LocalHost' + '/URLOFWEBSERVICE',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
form: {
userID: user,
userIpAddress: ipadd
}
}, function(error, response, body) {
if (error) {
console.log(error);
} else {
console.log(response.statusCode, body);
var newPro = new Promise(function(fulfill, reject) {
fulfill(body);
});
console.log(newPro);
return newPro;
}
});
}
我能够打印出response.stateCode,body(REST结果)和" invoked fulfill"控制台打印出来。
问题在于
第一页中的returnPromise.then
,其中" .then" 返回未定义。
起初我认为在REST返回响应之前可能已经调用了promise。所以,我想过做一个超时功能来测试。
setTimeout(
function(){
console.log(returnPromise);
}
, 5000);
但即便如此,returnPromise也会回复我" undefined"。
答案 0 :(得分:4)
如果您希望函数返回一个promise,它应该返回一个promise
你的testService不会返回任何内容
这样做:
testService() {
console.log("start of testService");
var request = require('request');
var user = "test";
var ipadd = "127.0.0.1";
return new Promise(function(fulfill, reject) {
request({
url: 'https://' + 'LocalHost' + '/URLOFWEBSERVICE',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
form: {
userID: user,
userIpAddress: ipadd
}
}, function(error, response, body) {
if (error) {
// reject the promise, handle with .catch
reject(error);
} else {
console.log(response.statusCode, body);
fulfill(body);
}
});
});
}
可以称为
// var self = this; // why? not needed in the code shown
// var returnPromise; // why? it's not needed in the code shown
this.httpService.testService()
.then(function(result) {
console.log(result);
})
.catch(function(err) {
// handle your errors here
});