在Javascript中,resolve和reject是承诺方法还是只是一些变量?

问题描述 投票:0回答:1

以下面的代码为例

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

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

javascript ecmascript-6 javascript-objects es6-promise
1个回答
3
投票

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。


0
投票

在第一种情况下,该函数是由 Promsie 对象,并提供所需参数 resolvereject,这将是函数。

在你的第二种情况下,你立即调用函数,它不工作的原因是你没有将函数传递给调用。

(function(resolve, reject) { 
const x = "geeksforgeeks"; 
const y = "geeksforgeeks"
if(x === y) { 
  resolve(); 
} else { 
  reject(); 
} })(resolveFunctionHere, rejectFunctionHere) <----- HERE
© www.soinside.com 2019 - 2024. All rights reserved.