鉴于我具有以下功能:
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
。有更好的方法吗?
编辑:我最初给出的示例不是最好的。更新了我的问题和代码。
答案 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