获取Promise中单个函数的返回值

时间:2017-11-10 20:46:07

标签: javascript node.js

我有以下代码片段包含Promise:

...
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": "test@test.pt", "password": "test" },
        json: true
    }, function (error, response, body) {
        if (error) {
            throw error;
        }
        console.log("return test");
        return body.token;
    });

Altough the String" Return test"打印出来,它在上面的承诺中给出了一个错误,说明如下:

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

任何人都可以帮我找到解决方案或问题来源吗?

提前致谢, 迪奥戈桑托斯

1 个答案:

答案 0 :(得分: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": "test@test.pt", "password": "test" },
        json: true
    }, function (error, response, body) {
        if (error) {
            return reject(error);
        }
        console.log("return test");
        return resolve(body.token);
    });
  });
}