所以,我正在学习承诺,为了演示承诺,讲师首先从传统的回调示例开始。但是,我对他使用的语法以及似乎从哪里出现一些额外的参数有点困惑。
我正在寻找的是一个愚蠢的解释,以帮助我理解它。这些是我的具体问题:
在下面代码的第一行中,是"回调"和参数吗?是函数的名称吗?还是别的什么?
在第三行和第四行,我了解我们传入的内容(错误或结果),但我不明白这两个参数来自哪里,因为我们没有在任何地方定义两个参数。程序如何知道没问题并且不会抛出错误?
不过,我不需要帮助来理解何时调用函数,因为我明白这一点,这只是定义函数时我感到困惑的一些东西。我认为可能是箭头语法让我失望了。
我尝试在谷歌上搜索并一遍又一遍地重新观看视频,但仍然无法掌握发生了什么。
const doWorkCallback = (callback) => {
setTimeout(() => {
// callback('This is my error', undefined)
callback(undefined, [1, 4, 7])
}, 2000)
}
doWorkCallback((error, result) => {
if(error) {
return console.log(error)
}
console.log(result)
})
"回调"是一个参数吗?
不,它是参数的名称(参数是您传递给函数的内容,参数是用于从函数内部访问该参数的变量)。
是函数的名称吗?
有点。您可以使用该标识符访问变量(/参数),该变量保存您作为参数传递给函数的任何值。在您的情况下,您将一个函数传递给它((error, result) => ...
),因此callback
将引用该函数。
第三行和第四行,我了解我们传入的内容(错误或结果),但我不明白这两个参数来自哪里,因为我们没有在任何地方定义两个参数。
您确实定义了一个接受两个参数 ((error, result) => {
) 的函数。但这并不重要:你可以将任意数量的参数传递给函数,无论它有多少参数。如果传递的参数多于参数,则参数将无处可去:
alert("used", "ignored");
如果反过来,则未收到参数的参数undefined
:
function one(arg1) { /* arg1 is undefined */ }
one();
我认为可能是箭头语法让我失望了。
这是一个仅具有常规功能的版本:
function doWorkCallback(callback) {
setTimeout(function() {
// callback('This is my error', undefined);
callback(undefined, [1, 4, 7]);
}, 2000);
}
doWorkCallback(function (error, result) {
if(error) {
return console.log(error);
}
console.log(result);
})
您可以在 Codeburst 和 MDN 上阅读有关箭头函数的信息......
1- 是的,callback
是doWorkCallback
函数的参数。
2-您正在传递一个函数,而不是两个参数。该函数确实会收到太error
和result
的参数。
因此,如果您转到doWorkCallback函数,您会看到您将调用回调,未定义为错误,每2秒[1, 4, 7]
一次结果