javascript - 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
有人可以解释这是如何工作的吗?
解决方案
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 的原因。
推荐阅读
- server - Ghost 博客:Google Compute Engine - 意外关闭连接
- php - 什么会导致我的 ajax 无法执行所有命令?
- python - SPARQL 查询返回的行数比预期的多
- azure - 在 Azure 中重置域控制器的密码
- amazon-web-services - 即使在 EC2 上增加卷和分区大小后,设备上也没有剩余空间
- supervisord - “通知发送”的命令在主管中不起作用
- file - C 一般 sscanf 返回
- python - 如何找到定义了两个点的矩形的面积和周长?
- node.js - TypeError:无法在字符串上创建属性“_id”......即使在使用 JSON.Parse 之后??(MongoDB /Node.js / Twitter API)
- java - Java - 当从另一个方法创建对象时,尝试从主方法中打印对象的 get 方法