我将如何以及为什么使用回调?我的解释和需要的保证

时间:2018-10-27 14:19:20

标签: javascript node.js

因此,今天早上我一直在创建随机回调函数,目的是让我真正了解如何使用它们以及为什么使用它们。

我得出的结论是,回调函数作为参数传递给另一个函数,目的是使用第一个函数中的数据来在回调函数中执行某些操作?让我知道我自己的解释是否合理,或者我是否不太满意。

我会使用这些回调函数来等待另一个函数所需的数据,以使我的回调正常工作吗?

对我来说,这似乎是最奇怪但最难的概念。就像第一天,我有信心,然后一周后又感到困惑。

3 个答案:

答案 0 :(得分:1)

解释正确。顾名思义,回调是用于回调的函数:

function callMeBackPleaseAndSayWakeUp(phrase) {
  say(phrase);
}

function aFriendWhoLovesToWorkAsAHumanAlarm(timeSpan, callback) {
  setTimeout(() => callback('Wake up'), timeSpan);
}

aFriendWhoLovesToWorkAsAHumanAlarm(60 * 60 * 9, callMeBackPleaseAndSayWakeUp);

回调是使松散耦合的应用程序彼此交互的基本机制。

答案 1 :(得分:0)

想象一下某个函数需要一些时间才能完成,例如函数内部的setTimeout,因此您想在setTimeout完成后再运行其他函数。您不能仅一个接一个地调用函数来执行此操作,因为它只会启动倒数计时并继续执行下一个函数。因此,您需要在setTimeout内创建函数,并在首次调用AKA回调函数时将函数作为参数传递。

现在您会想,“但是我可以像这样简单地在setTimeout函数内部插入代码块”

function doItAfterMinute(){
    setTimeout(()=>{
        //block of code
    },60000)
}

是的,但是如果一分钟后要完成10个不同的功能,怎么办却不会使10个setTimeout函数具有10个不同的名称呢? 在这种情况下,回调显示了它的力量。

function doItAfterMinute(cb){
    setTimeout(()=>{
        cb()
    },60000)
}

doItAfterMinute(()=>{ console.log('hey, minute passed!)) doItAfterMinute(()=>{ console.log('hey, another minute!))

答案 2 :(得分:0)

  

我会使用这些回调函数来等待另一个函数所需的数据,以使我的回调正常工作吗?

这是一个常见的用例:您正在等待直到将来某个时间才可用的数据。

另一个用例:您只需要通知发生了什么事即可。进程已成功(或未成功)完成,并且您要更新UI。

还有另一件事:您需要通知您一些时间已经过去。 setTimeout()setInterval()是完美的例子。

要尝试,请在浏览器中打开控制台(在Mac上为⌘-Alt-I;在其他计算机上为Ctrl-Shift-I或其他工具),然后键入以下内容:

setTimeout(() => console.log("Two seconds later"), 2000);

两秒钟后...