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

mad*_*n01 0 javascript javascript-objects ecmascript-6 es6-promise

采取下面的示例代码

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'); 
    }); 
Run Code Online (Sandbox Code Playgroud)

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

(function(resolve, reject) { 
const x = "geeksforgeeks"; 
const y = "geeksforgeeks"
if(x === y) { 
  resolve(); 
} else { 
  reject(); 
} })()
Run Code Online (Sandbox Code Playgroud)

如果我运行上面的代码,我会收到以下错误

Uncaught TypeError: resolve is not a function
Run Code Online (Sandbox Code Playgroud)

有人可以解释这是如何工作的吗?

Jos*_*son 5

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

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

    handler(resolve, reject);
  }
}
Run Code Online (Sandbox Code Playgroud)

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