首页 > 解决方案 > Javascript Promise 方法中的 resolve 和 reject 是还是一些变量?

问题描述

采取下面的示例代码

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

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

标签: javascriptecmascript-6javascript-objectses6-promise

解决方案


resolve并且reject来自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 的原因。


推荐阅读