我研究承诺。典型的承诺看起来像这样:
let cleanMyRoomPromiseCallback = function(resolve, reject) {//where "resolve" and "reject" come from?
resolve("My room is clear!");
}
let cleanMyRoom = new Promise(cleanMyRoomPromiseCallback)
.then((onCleanMyRoomResolve)=> {
console.log(onCleanMyRoomResolve);
})

函数cleanMyRoomPromiseCallback
有两个参数:resolve
和reject
。当该函数传递给Promise
的构造函数时,它们在我看来并未定义。这些标识符只是一些文本。他们如何评估?他们来自Promise
构造函数本身吗?
答案 0 :(得分:1)
是的,Promise
构造函数将函数作为参数,这也需要2个函数作为参数(您在那里看到的resolve
和reject
函数)。如果您想了解有关Promise构造函数的更多信息,MDN文章是一个很好的方法来加快速度:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
答案 1 :(得分:1)
我将回答更广泛的问题"回调参数来自哪里?"
简短而又甜蜜的答案是,无论调用回调都会传递参数。
一个简单的例子应该明确这一点。
如果我们定义一个接受回调的函数:
function example(callback) {...}
需要在函数内的某处调用回调才有用:
function example(callback) {
callback('Hello World!')
}
当您想使用该功能时,您需要知道将哪些参数传递给回调。在我们的示例中,只有一个参数,因此回调应该处理该参数:
example(function (text) {
console.log(text) // writes "Hello World!" to the console
})
当你使用new Promise
时,构造函数在调用它的回调函数时会传递两个函数。
答案 2 :(得分:1)
promise构造函数的行为如下:
function Promise(callback){
const handlers = [];
function resolve(value){
for(const [success] of handlers)
if(success) success(value);
}
function reject(error){
for(const [, catch] of handlers)
if(catch) catch(error);
}
// Now call the callback and pass the functions:
callback(resolve, reject);
// Return the created promise...
}