javascript - .then 在 promise 完成之前执行之后
问题描述
我是 javascript 的新手,并且在 javascript 的异步概念中苦苦挣扎。在下面的代码中handler.flexCarouselReply
,应该等待的函数resultArr
在 Promise 完成之前执行。
new Promise((resolve) => {
const resultArr = checkRedeemList.map((redeemPath) => {
const couponCode = redeemPath.id;
redeemPath.get().then((redeemInfo) => {
if (redeemInfo) {
console.log(`checking ${couponCode}`);
const redeemData = redeemInfo.data();
const createDate = redeemData.CreatedDate;
const expireDate = redeemData.ExpiredDate;
console.log(`${couponCode} createDate ${createDate} expireDate ${expireDate}`);
const isUsed = redeemData.UsedDate;
if (!isUsed) {
console.log(`${couponCode} is active`);
const reward = redeemData.Reward;
reward.get().then((rewardInfo) => {
const rewardData = rewardInfo.data();
const title = rewardData.Title;
const backgroundColor = rewardData.ButtonColor;
const imgUrl = rewardData.TransparentImageUrl;
return {
"type": "bubble",
"direction": "ltr",
"header": {
"type": "box",
"layout": "vertical",
"contents": [{
"type": "box",
"layout": "baseline",
"contents": [{
"type": "text",
"text": "รหัสรางวัล:",
"flex": 2,
"contents": [],
},
{
"type": "text",
"text": `${couponCode}`,
"flex": 4,
"contents": [],
},
],
},
{
"type": "box",
"layout": "baseline",
"contents": [{
"type": "text",
"text": "สถานะ:",
"flex": 2,
"contents": [],
},
{
"type": "text",
"text": "ใช้งานได้",
"weight": "bold",
"color": "#4FEA0BFF",
"flex": 4,
"contents": [],
},
],
},
],
},
"hero": {
"type": "image",
"url": `${imgUrl}`,
"size": "full",
"aspectRatio": "1.51:1",
"aspectMode": "fit",
"backgroundColor": `${backgroundColor}`,
},
"body": {
"type": "box",
"layout": "vertical",
"contents": [{
"type": "box",
"layout": "baseline",
"contents": [{
"type": "text",
"text": "ชื่อรางวัล:",
"flex": 2,
"contents": [],
},
{
"type": "text",
"text": `${title}`,
"size": "xs",
"flex": 4,
"wrap": true,
"contents": [],
},
],
},
{
"type": "box",
"layout": "baseline",
"contents": [{
"type": "text",
"text": "วันที่แลก:",
"flex": 2,
"contents": [],
},
{
"type": "text",
"text": `${createDate}`,
"size": "xs",
"flex": 4,
"wrap": true,
"contents": [],
},
],
},
{
"type": "box",
"layout": "baseline",
"contents": [{
"type": "text",
"text": "วันหมดอายุ:",
"flex": 2,
"contents": [],
},
{
"type": "text",
"text": `${expireDate}`,
"size": "xs",
"flex": 4,
"wrap": true,
"contents": [],
},
],
},
],
},
};
});
} else {
// not show
util.log("test", `the ${couponCode} is expired or already used`);
}
} else {
// redeem in fo already been deleted
util.log("test", `the ${couponCode} already been deleted`);
}
}).catch((error) => {
// error get redeem info
util.log("test", `Error getting redeem information ${error}`);
});
});
resolve(resultArr);
}).then((resultArr) => {
console.log(`resultArr ${resultArr}`);
handler.flexCarouselReply(req, res, replyToken, CONST.ChannelEnum.BOT, resultArr);
};
我怎样才能设法订购此执行的步骤。
解决方案
推荐阅读
- jestjs - 如果我只传递一个原始值,为什么这个函数会被一个对象调用?
- android - java.lang.AssertionError:使用前必须配置实例
- excel - 使用 VBA 将一系列单元格从一个工作表复制到另一个工作表
- python - “[Errno 2] 没有这样的文件或目录”问题
- javascript - 在 useState 反应后立即获得价值
- python - Python mock values using side_effect but for a function which is returning multiple parameters
- javascript - Text paragraph with keywords tagged/highlighted by category
- python - Extract specific columns from file with shell script
- git - Git 合并不起作用,但响应消息已准备好合并
- excel - 在 Powerquery 中删除重复项忽略了我已经对数据进行了排序(因此删除了错误的重复项)