無極

2017-11-10 44 views
0

我已經包含無極下面的代碼段中獲取的單個函數的返回值:無極

... 
return Promise.all([postHTTP()]) 
.then(function (results) { 
    loginToken = results[0].data.token; 
    console.log("token:" + loginToken); 
    }) 
    .catch(error => { 
    throw error; 
}); 
... 

和函數:打印

function postHTTP() { 
    request.post({ 
     headers: { 'content-type': 'application/json' }, 
     url: 'http://localhost:55934/api/Token', 
     body: { "email": "[email protected]", "password": "test" }, 
     json: true 
    }, function (error, response, body) { 
     if (error) { 
      throw error; 
     } 
     console.log("return test"); 
     return body.token; 
    }); 

Altough字符串「返回測試」,它給了我一個在承諾上面的錯誤說:

(node:15120) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'token' of undefined 

任何人都可以幫我找到一個解決方案還是這個問題的來源?

由於提前, 迪奧戈桑托斯

+1

我看你不'return'在'postHTTP'你'request.post';所以它返回undefined,如果你沒有把它包裝進Promise.all()會引發n錯誤 – skyboyer

回答

1

的問題在你的postHTTP功能。當多承諾的工作,你必須承諾陣列傳遞到Promise.all,因此你必須的功能是這樣的:

function postHTTP() { 
    return new Promise(function (resolve, reject) { 
    request.post({ 
     headers: { 'content-type': 'application/json' }, 
     url: 'http://localhost:55934/api/Token', 
     body: { "email": "[email protected]", "password": "test" }, 
     json: true 
    }, function (error, response, body) { 
     if (error) { 
      return reject(error); 
     } 
     console.log("return test"); 
     return resolve(body.token); 
    }); 
    }); 
}