promise回调参数来自哪里

时间:2018-02-16 16:31:15

标签: javascript

我研究承诺。典型的承诺看起来像这样:



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有两个参数:resolvereject。当该函数传递给Promise的构造函数时,它们在我看来并未定义。这些标识符只是一些文本。他们如何评估?他们来自Promise构造函数本身吗?

3 个答案:

答案 0 :(得分:1)

是的,Promise构造函数将函数作为参数,这也需要2个函数作为参数(您在那里看到的resolvereject函数)。如果您想了解有关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...
}