javascript - 用列表承诺所有并在里面追加
问题描述
我有两个包含异步操作的函数,它们返回一个列表。我使用 promise all 来同时执行它们。第一个列表有效,但第二个列表显示未定义。
let content = "<div class='clsLines'>";
return Promise.all([
firstList()
]).then((messages) => {
content+= messages
secondList()
}).then((messages) => {
content+= messages
content+="</div>"; // close clsLinesDiv
$('#id').find('.cls').append(content); // append the lists in a div
});
如何显示第二个列表而不是未定义的?关闭 div 和 append 应该在承诺之内还是之外
谢谢 !
解决方案
您没有同时执行它们。你是secondList()
在之后开始的firstList()
。但无论如何,你看到的是你所看到的,因为你错过了一个return
陈述。它应该是
.then((messages) => {
content+= messages
return secondList()
})
但是,您实际上可以“并行”执行这些承诺并避免共享变量:
Promise.all([firstList(), secondList()])
.then(([firstResult, secondResult]) => {
$('#id').find('.cls')
.append(`<div class='clsLines'>${firstResult}${secondResult}</div>`);
})
推荐阅读
- android - 如何从 recyclerview 片段传递到另一个 recyclerview 片段
- python - 将 self.showtraceback 写入字符串?
- karate - 空手道 1.0.0 及以上:方法 POST 时,调用返回成功响应但同时失败并出现 Null Pointer 异常
- pyspark - 多列上具有滞后条件的行号
- python - 使用 scipy 生成相平面/肖像
- python-3.x - 烧瓶分页和 Current_user
- visual-studio-code - VSCode 没有检测到我的任何 pytest 测试
- python - 未找到商家 ID - 亚马逊
- javascript - 错误:聊天(...):渲染没有返回任何内容。这通常意味着缺少 return 语句。或者,不渲染任何内容,返回 null
- bash - 让ffmpeg在Ctrl-C后继续几秒钟