以下面的代码为例
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不是函数。但是如果我只是执行作为参数传递给Promise()的函数,我得到一个错误,说resolve不是一个函数。
(function(resolve, reject) {
const x = "geeksforgeeks";
const y = "geeksforgeeks"
if(x === y) {
resolve();
} else {
reject();
} })()
如果我运行上面的代码,我得到下面的错误信息。
Uncaught TypeError: resolve is not a function
谁能解释一下这是如何工作的?
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。
在第一种情况下,该函数是由 Promsie
对象,并提供所需参数 resolve
和 reject
,这将是函数。
在你的第二种情况下,你立即调用函数,它不工作的原因是你没有将函数传递给调用。
(function(resolve, reject) {
const x = "geeksforgeeks";
const y = "geeksforgeeks"
if(x === y) {
resolve();
} else {
reject();
} })(resolveFunctionHere, rejectFunctionHere) <----- HERE