从REST调用返回承诺

时间:2016-12-29 03:00:10

标签: javascript ionic-framework promise ionic2

我试图调用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"。

1 个答案:

答案 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
});
相关问题