承诺回调参数来自哪里
Posted
技术标签:
【中文标题】承诺回调参数来自哪里【英文标题】:Where do the promise callback arguments come from 【发布时间】:2022-01-01 14:28:21 【问题描述】:我研究承诺。典型的承诺如下所示:
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
构造函数本身/评估?
【问题讨论】:
是的。Promise
构造函数调用传递的回调并传递resolve 和reject 函数。这些函数的实际作用取决于浏览器的实现。
【参考方案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...
【讨论】:
【参考方案2】:是的,Promise
构造函数将一个函数作为参数,它还需要 2 个函数作为参数(您在此处看到的 resolve
和 reject
函数)。如果您想了解更多关于 Promise 构造函数的信息,MDN 文章是一个快速入门的好方法:
https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/Promise
【讨论】:
【参考方案3】:我将回答“回调参数从何而来?”这一更广泛的问题
简短的回答是,参数由调用回调的任何对象传递。
一个简单的例子应该可以清楚地说明这一点。
如果我们定义一个接受回调的函数:
function example(callback) ...
回调需要在函数内的某个地方调用才能发挥作用:
function example(callback)
callback('Hello World!')
当你想使用该函数时,你需要知道将哪些参数传递给回调。在我们的示例中,只有一个参数,因此回调应该处理该参数:
example(function (text)
console.log(text) // writes "Hello World!" to the console
)
当您使用new Promise
时,构造函数在调用其回调时传递两个作为函数的参数。
【讨论】:
以上是关于承诺回调参数来自哪里的主要内容,如果未能解决你的问题,请参考以下文章