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)
有人可以解释这是如何工作的吗?
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 的原因。