Javascript 承诺建造商和;财产';手孔';“不可赎回”;错误

Javascript 承诺建造商和;财产';手孔';“不可赎回”;错误,javascript,promise,Javascript,Promise,此代码返回上述错误-为什么 function rej(params) { } function res(params) { } let func = new Promise(function (res, rej) { }); 我做错了什么 编辑 一些额外信息(如评论中建议的) 我试图理解Promise构造函数以及如何使用它。我不是在要求技术来解决问题,我只是试图理解它。 通过链接然后将链接到承诺,使用承诺很简单。我问的是关于构造函数的问题。 谢谢每当您使用新的操作符时,您都会返回一个非函数对

此代码返回上述错误-为什么

function rej(params) {
}
function res(params) {
}

let func = new Promise(function (res, rej) {
});
我做错了什么

编辑 一些额外信息(如评论中建议的)

我试图理解Promise构造函数以及如何使用它。我不是在要求技术来解决问题,我只是试图理解它。
通过链接
然后将
链接到承诺,使用承诺很简单。我问的是关于构造函数的问题。

谢谢

每当您使用
新的
操作符时,您都会返回一个非函数对象。承诺不是一种功能

let func = function(e){
    return new Promise(function (res, rej) {
        return ...
    }); };
此外,您不需要定义res和res函数,它们内置于Promise中。 阅读承诺API

我做错了什么

首先,这个代码:

let func = new Promise(function (res, rej) {
});
创造一个永远不会被解决或拒绝的承诺。在执行异步操作的回调函数中应该有代码,然后当异步操作完成时,它调用传递给该回调函数的两个函数中的一个
res(value)
rej(reason)
。此回调函数的两个参数如下:
函数(res,rej){
是承诺创建并传递给回调的函数。作为承诺的创建者,您的工作是在将来某个时候调用其中一个函数。没有代码调用其中一个函数的承诺是没有用的。它只是一个从不做任何事情的对象

其次,此代码还将新创建的承诺赋给名为
func
的变量。这意味着您认为它是一个函数。它不是。它是一个对象,更具体地说是一个承诺对象。您不能像调用函数一样调用该对象

第三,然后接受该承诺并在此处将其作为回调函数传递:

btn.addEventListener("click", func);
addEventListener()
需要第二个参数作为函数。您传递的承诺不是函数。这是一个调用错误


如果不进一步描述(用文字)您正试图实现的目标,我们就无法提出更具体的编码建议,只能回答您的直接问题并解释您所展示的代码的错误之处



此外,请记住,承诺是一次性的设备。它们不能被多次解析或拒绝。因此,当事件可能发生多次时(如单击按钮),它们通常与事件侦听器不太匹配除非你只想知道第一次点击,而不想知道接下来的点击。它们与只发生一次的事件很匹配,例如
完成
关闭
或类似的事件。

让func=new Promise
否,
func
是一个承诺,而不是一个函数-
new Promise
返回一个PromisEinstance@CertainPerformance我明白。那么,在这种情况下,构造函数有什么用处呢?为了帮助您修复这种结构错误的代码,我们需要了解您试图解决的问题。您希望btn click listener做什么?帮助您解决实际问题可能比帮助您解决问题更有用y来解释为什么当您将函数以外的内容传递给侦听器时,会出现此特定错误。此外,您对
res
rej
的定义看起来也不正确,因为这些函数是由承诺本身创建的,并传递给承诺执行器回调函数。然后您调用,而不创建它们。您要做什么ying to do?@yossi-我不知道这句话的意思。我看不到你展示的代码中有任何链接。我重复一遍。如果你需要帮助,请告诉我们你想完成什么。这段代码非常不正确,我们无法判断你想做什么。他们使用的语法与你在这里使用的语法不同。你创建了一个承诺,没有任何东西放在里面取消executor函数的作用,使承诺永远不会被拒绝或解决,然后将一个承诺传递给一个毫无意义的事件侦听器。MDN不做任何这些事情。加上名为的变量意味着您认为
func
是一个函数。它不是,它是一个承诺。实际上,代码中没有任何正确的内容您只显示了
var btn=document.getElementById(“_btn”);
。因此,在您用文字解释您试图实现的目标之前,我们无法帮助您。