首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发布Promise.all()

发布Promise.all()
EN

Stack Overflow用户
提问于 2021-10-10 10:53:48
回答 2查看 145关注 0票数 0

我想宣布一组空的承诺

然后手动解决它们,但它不起作用?

代码语言:javascript
复制
const tab = [1]
let promises = tab.map(e => new Promise(() => { }))
setTimeout(() => {
  promises[0] = Promise.resolve()
}, 3000);
Promise.all(promises)
  .then(e => console.log("finished"))

我不希望这样做:

代码语言:javascript
复制
const tab = [1]
let promises = tab.map(e => new Promise((resolve) => { 
  setTimeout(() => {
    resolve()
  }, 3000);
}))

Promise.all(promises)
  .then(e => console.log("finished"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-10 10:58:35

这是你能得到的最接近的:

代码语言:javascript
复制
const tab = [1]
let resolves = []
let promises = tab.map(e => new Promise((resolve) => {
   resolves.push(resolve)
}))
setTimeout(() => {
  resolves[0]()
}, 3000);
Promise.all(promises).then(e => console.log("finished"))
票数 2
EN

Stack Overflow用户

发布于 2021-10-11 03:03:24

下面是一种使用可重用deferred函数的技术,它允许您从外部控制承诺。我们扩展了resolvereject功能,允许对调用方进行更好的控制。这是一种有点非常规的模式,但以这种方式利用承诺是有好处的。有关详细示例,请参见this Q&A -

代码语言:javascript
复制
function deferred () {
  let resolve, reject, promise = new Promise((res, rej) => {
    resolve = res; reject = rej
  })
  return { promise, resolve, reject }
}

const tasks = [ deferred(), deferred(), deferred() ] // 3 "deferrred" objects

Promise.all(tasks.map(t => t.promise)).then(console.log, console.error)

setTimeout(_ => tasks[0].resolve("one"), 1000)
setTimeout(_ => tasks[1].resolve("two"), 2000)
setTimeout(_ => tasks[2].resolve("three"), 3000)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69514507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档