javascript - 获取Promise内单个函数的返回值

标签 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;
    });

尽管打印了字符串“Return test”,但它在上面的 Promised 中给出了一个错误,内容如下:

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

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

提前致谢, 迪奥戈·桑托斯

最佳答案

您的 postHTTP 函数中存在问题。当使用多个 Promise 时,您必须将 Promise 数组传递到 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);
    });
  });
}

关于javascript - 获取Promise内单个函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230855/

相关文章:

javascript - 使用 ember 数据在投票后保留在屏幕指示器上

javascript - 为什么将 .getJSON 中的名称声明为列表中的索引后仍未定义(JavaScript/JQuery)

javascript - 设置 CodeMirror Merge View + Require.js 时遇到问题

javascript - 在 jquery mobile 中将日期从 json 转换为常规范式

node.js oracledb 不插入也不更新

javascript - 发出多个并行 REST 调用并等待 Node.js 中的所有结果的推荐方法

javascript - 事件页面卸载后,没有在 Chrome 上获取 UDP 套接字的 onReceive 回调

javascript - POST 400(错误请求) polymer 应用程序

node.js - Nodejitsu 支持 makefile 功能吗?

node.js - Expo React Native : expected version range: ~6. 0.0 - 实际安装的版本 : ^5. 0.1