【发布时间】:2018-12-24 18:11:58
【问题描述】:
我是 async 的新手,也许只是没有深入了解基础知识,但我试图通过调用一个弹出模式并等待用户提交数据的异步函数来等待来自 onclick 的用户输入。在仅找到一两个甚至提到使用异步等待对我的特定任务没有特别帮助的页面事件的来源之后......我想出了这个:
asnyc func1 (){
var userInput = await async2();
//do stuff with user input
}
async func2(){
//build modal content specific to task
//display modal
return new Promise(function(resolve,reject){
$(document).on('click', '#save-input', function(e){
var input = $('#input-data').val();
resolve(input);
});
});
}
一切似乎都正确调用并且我得到了用户输入,但 func1 永远不会继续超过对 async2 的调用。所以显然我错过了这方面的一些关键方面,但我似乎无法从我的来源中提取它。
回调不是一个选项,这里的代码比我能详细说明的要多得多,但上面描述的是我需要执行的基线功能。
【问题讨论】:
-
对我来说看起来不错。你能提供一个更接近你实际代码的minimal reproducible example吗?
-
注意你应该使用
once而不是on,因为promise只能解析一次,之后它会自动删除处理程序。 -
我会尽快添加一个,这两个函数都是匿名对象成员函数会有什么不同吗?和/或如果我在
var input =发生之前调用其他两个函数会有所不同吗?想知道我是否也需要等待每个人 -
问题已解决,我意识到另一部分代码提前调用了 func2 并导致 promise 在错误的情况下返回,从而打乱了流程,以至于当我真正想等待 promise 时...已经解决了。
-
在这种情况下你可能想删除你的问题
标签: javascript callback async-await event-handling dom-events