javascript - Promise 构造函数和“属性 'handleEvent' 不可调用”错误
问题描述
此代码返回上述错误 - 为什么?
function rej(params) {
}
function res(params) {
}
let func = new Promise(function (res, rej) {
});
我究竟做错了什么?
编辑
一些额外的信息(如评论中所建议的)
我正在尝试了解 Promise 构造函数以及如何使用它。我不是在寻求解决问题的技术,我只是试图理解它。
通过将 ' 链接到它来使用 Promise 很简单then
。我问的是关于构造函数的。
谢谢
解决方案
我究竟做错了什么?
首先,这段代码:
let func = new Promise(function (res, rej) {
});
创建一个永远不会被解决或拒绝的承诺。应该在该回调函数中包含执行异步操作的代码,然后当该异步操作完成时,它会调用传递给该回调的两个函数中的一个res(value)
或rej(reason)
. 这里回调函数的两个参数: function (res, rej) {
是 promise 创建并传递给回调的函数。作为承诺的创造者,你的工作是在未来的某个时间调用其中之一。没有任何代码调用其中之一的承诺是没有用的。它只是一个从不做任何事情的对象。
其次,此代码还将新创建的承诺分配给名为 的变量func
。这意味着你认为它是一个函数。它不是。它是一个对象,更具体地说是一个 Promise 对象。您不能像调用函数那样调用该对象。
第三,然后您接受该承诺并将其作为回调函数传递:
btn.addEventListener("click", func);
addEventListener()
需要第二个参数是一个函数。你传递了一个不是函数的承诺。这是一个调用错误。
如果没有进一步描述(用文字)您要完成的工作,我们无法提出更具体的编码建议,只能回答您的直接问题并解释您在显示的代码中做错了什么。
另外,请记住,promise 是一次性设备。它们永远不会被解决或拒绝超过一次。因此,当事件可能发生多次(如按钮单击)时,它们通常与事件侦听器不能很好地匹配,除非您只想知道第一次单击而没有后续单击。它们确实与仅发生一次的事件(例如finished
或close
或类似的事件)很好地匹配。
推荐阅读
- xcode - SwiftUI 需要大量 RAM?
- python - 如何分隔接口名称
- python - 如何解决 apachestorm worker 崩溃问题
- ruby-on-rails - 如何在 Mongo + Rails 中插入许多?
- python - 使用pyinstaller时如何在python脚本中选择文件路径?
- javascript - 使用 Reduce 而不是链接过滤器和映射
- swift - 如何避免在uitableview中刷新
- beta - 如何将多个表单值添加/绑定到服务器端 Blazor 方法
- javascript - JavaScript:如何根据从另一个插入的值计算和更新输入字段值
- database - Postgres 仅索引扫描耗时太长