javascript - 等待第二个承诺
问题描述
现在我正在学习 Promise 并想从一个也使用 Promise 的网络服务器获取一个令牌。我之前尝试过没有承诺,但它也不起作用。
这是第一块。
promise = new Promise(resolve => {
let accessToken = helper.getAccessToken(baseUrl);
let userCollection = helper.createCollection("user", db);
let excersizeCollection = helper.createCollection("excercise", db);
resolve({
accessToken: accessToken,
database: {
userCollection: userCollection,
excersizeCollection: excersizeCollection
}
});
});
promise
.then(promises => {
console.log("my token" + promises.accessToken);
new nceDefaultbotCommands(bot, promises.accessToken, baseUrl);
new botComamnds(bot, promises.database);
let userController = new reqUserController(
baseUrl,
0,
promises.accessToken
);
bot.start();
})
.catch(() => {
console.log("error");
});
只有访问令牌不起作用,这是在我的助手类中,它看起来像这样。
static getAccessToken(baseUrl) {
let promise = new Promise(resolve => {
request.post(
{
url: baseUrl + "/token",
body: {
credentials: {
user: "USER",
password: "PW"
}
},
json: true //// Automatically parses the JSON string in the response
},
(error, response, body) => {
if (error) console.log("error");
if (!error && response.statusCode === 200) {
resolve({ token: body.token });
}
}
);
});
promise.then(resolve => {
console.log(resolve.token);
return resolve.token;
});
}
我得到了访问令牌,但通常是在第一个承诺之后。
提前致谢。
解决方案
您正在用一个对象履行您的第一个承诺,因此该对象是履行价值(承诺不会神奇地解析为作为该对象属性值的承诺)。
new Promise
当您有一个或多个承诺可以使用时,没有理由使用,只需将它们链接起来;在这种情况下,通过Promise.all
:
Promise.all([
helper.getAccessToken(baseUrl),
helper.createCollection("user", db),
helper.createCollection("excercise", db)
])
.then(([accessToken, userCollection, exersizeCollection]) => { // Note the destructuring
console.log("my token" + accessToken);
new nceDefaultbotCommands(bot, accessToken, baseUrl);
new botComamnds(bot, {userCollection, exersizeCollection});
let userController = new reqUserController(baseUrl, 0, accessToken);
bot.start();
})
.catch(/*...*/);
注意我更正了“exercise”的拼写,这可能需要更改您的botCommands
构造函数。
推荐阅读
- r - 如何使用 dplyr 基于缺失条件合并两个数据框?
- sql - oracle sql Developer花时间获取所有记录
- kubernetes - Helm 插值
- php - 根据php中的字段对多维数组进行排序
- javascript - JS Array Reduce 的好奇反应
- python - 用 0 填充缺失的日期(天)值
- pandas - 用于除法的熊猫数据框操作为 0
- mysql - 从 2 个表创建 mysql 视图,第一个表列值和第二个表列值应该匹配
- python - 如何在 django 中按类别过滤
- android-studio - Android Studio 突出显示代码红色且没有错误(Gradle 4.0.0 错误)