解决和拒绝嵌套函数中异步函数的承诺

时间:2019-12-23 13:24:30

标签: javascript es6-promise

鉴于我具有以下功能:

async function foo() {
  document.getElementById('ok').addEventListener('click', () => {
    // How do I resolve from foo here?
  })
  document.getElementById('cancel').addEventListener('click', () => {
    // How do I reject from foo here?
  })
}

正如评论所述,如何在嵌套函数中解析或拒绝foo的诺言?

我当前的解决方案是:

function foo() {
  return new Promise((resolve, reject) => {
    document.getElementById('ok').addEventListener('click', () => {
      resolve()
    })
    document.getElementById('cancel').addEventListener('click', () => {
      reject()
    })
  })
}

但是,我不得不自己返回Promise,而不是使用async。有更好的方法吗?

编辑:我最初给出的示例不是最好的。更新了我的问题和代码。

1 个答案:

答案 0 :(得分:0)

您可以从rootViewController返回bar的返回值来解决承诺,或者从foo抛出以拒绝它:

bar

根据对问题的修改进行修改

为了使它们与async function foo() { const bar = () => { return 'Resolved' //or `throw 'Rejected'` } //Where you call `bar`: return bar() } foo().then(console.log) //Resolved / async一起使用,您必须使所有异步操作合理化。

因此,您将需要像您一样创建诺言。然后,您可以兑现承诺。

因此,您的方法是完全正确的(您唯一可以做的简单优化就是避免创建其他处理函数)

await