Javascript promises 方法中的 resolve 和 reject 是 resolve 和 reject 还是只是一些变量?

Are resolve and reject in Javascript promises methods or just some variables?

采用下面的示例代码

var promise = new Promise(function(resolve, reject) { 
const x = "geeksforgeeks"; 
const y = "geeksforgeeks"
if(x === y) { 
    resolve(); 
} else { 
    reject(); 
} 
}); 

promise. 
    then(function () { 
        console.log('Success, You are a GEEK'); 
    }). 
    catch(function () { 
        console.log('Some error has occured'); 
    }); 

以上代码运行良好。但是,如果我只是执行作为参数传递给 Promise() 的函数,我会收到一条错误消息,指出 resolve 不是一个函数。

(function(resolve, reject) { 
const x = "geeksforgeeks"; 
const y = "geeksforgeeks"
if(x === y) { 
  resolve(); 
} else { 
  reject(); 
} })()

如果我运行上面的代码,我得到下面的错误

Uncaught TypeError: resolve is not a function

谁能解释一下这是如何工作的?

在第一种情况下,函数由 Promsie 对象使用所需参数 resolvereject 调用,这将是函数。

在您立即调用函数的第二种情况下它不起作用的原因是因为您没有将函数传递给调用:

(function(resolve, reject) { 
const x = "geeksforgeeks"; 
const y = "geeksforgeeks"
if(x === y) { 
  resolve(); 
} else { 
  reject(); 
} })(resolveFunctionHere, rejectFunctionHere) <----- HERE

resolvereject 来自 Promise 对象,但它们不是方法。 Promise 构造函数看起来像这样:

class Promise {
  // handler should look like (resolve, reject) => {}
  constructor(handler) {
    function resolve(value) { /***/ }
    function reject(err) { /***/ }

    handler(resolve, reject);
  }
}

当您使用函数类型的处理程序调用 new Promise(handler) 时,该处理程序将获取 用两个函数调用。当您调用不带参数的同一个处理程序时,处理程序 尝试调用 undefined,这就是您看到 TypeError 的原因。