2016-12-29 88 views
1

我試圖調用一個REST調用並返回一個承諾,以便我可以操作後面的數據。從REST調用返回承諾

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,身體(REST結果)和「履行調用「控制檯打印出來。

的問題在於

returnPromise.then

第一頁

,其中「於是」返回我不確定。

起初我以爲它可能是在REST返回給我回復之前已經調用的承諾。所以,我想做一個超時功能來測試。

setTimeout(
function(){ 
    console.log(returnPromise); 
} 
, 5000); 

但即便如此,returnPromise返回「未定義」。

+1

您至少需要發佈'testService()'的源代碼。 –

+1

什麼是'self.httpService.testService();'返回?一個承諾? ...是'.then'未定義或者是'result'.then callback undefined? –

+0

_「我的REST服務位於另一個文件中,該文件具有以下內容:」_是否在被調用的函數中的'javascript'位於「另一個文件中」? – guest271314

回答

2

如果你希望一個函數返回一個承諾,它應該返回一個承諾

您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 
}); 
+0

ahhh我不知道我的承諾並未實際返回。謝謝! – Gene

+2

你的意思是你的函數沒有返回一個:p –