我有以下包含 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/