【发布时间】:2020-05-13 19:31:53
【问题描述】:
以下示例代码
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
有人能解释一下这是如何工作的吗?
【问题讨论】:
-
@ScottMarcus 不,传递给执行器回调的两个解析器函数不是方法。
-
在 Javascript(独立于 Promise)中,你不能仅仅为函数编写参数并期望它们是有效的,除非调用函数的人传递了这些参数。在您的第二个示例中,没有任何内容传递给您的函数,因此
resolve和reject是undefined。在正常的 Promise 用法中,new Promise()的内部将为resolve和reject参数传递一个函数。因此,当您调用它们时,您正在调用new Promise()构造函数传递给您的回调的函数。您的第二个代码示例没有向函数传递任何内容。 -
我看到 jfriend00 解释的混乱,但我并不真正理解 OP 的逻辑。是否有一种语言可以让匿名函数自动将参数填充为可调用函数,这些函数取自内置的内部变量(或者在这种情况下是私有的非公开方法)?
-
@Bergi 我误解了这个问题。我指的不是传递的函数。我指的是
PromiseAPI。
标签: javascript ecmascript-6 javascript-objects es6-promise