Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我们需要回调而不是直接在函数内部调用?在JS中_Javascript_Promise_Callback - Fatal编程技术网

Javascript 为什么我们需要回调而不是直接在函数内部调用?在JS中

Javascript 为什么我们需要回调而不是直接在函数内部调用?在JS中,javascript,promise,callback,Javascript,Promise,Callback,我只是意识到我对javascript理解不够,尽管我已经编写了一段时间了 我不舒服的是Javascript异步 到目前为止,我一直在使用callback和promise,因为文档和教程都是这样做的 $.get("some/url", function() { // callback body }) axios.get('some/url').then(res => { console.log(res.data); }); arr.map(elemen

我只是意识到我对javascript理解不够,尽管我已经编写了一段时间了

我不舒服的是Javascript异步

到目前为止,我一直在使用callback和promise,因为文档和教程都是这样做的

$.get("some/url", function() {
    // callback body
})

axios.get('some/url').then(res => {
    console.log(res.data);
});

arr.map(element => console.log(element))
我知道回调用于异步代码

function doSomething(cb) {
  console.log("this function receives callback function");
  cb();
}
但是如果我们只是手动调用函数内部的函数呢

function func1() {
  // function body
}
function doSomething() {
  console.log("this function receives callback function");
  func1();
}
我的想法是,只要函数在正确的时间被调用,我们就不必使用回调。 或者是因为回调在其他操作进行时执行它的工作? 如果是这样的话,它是否打破了javascript作为单线程的原则? 因为它同时做两件事

此外,人们是否因为其可读性而使用promise优于回调函数,而您可以使用promise.all()? 我觉得我失去了使用承诺的一个核心优势


请帮助我更好地理解。

如果您不使用回调,那么您只能调用
func1()
。原始的
doSomething()
更通用,因为您可以根据调用者的需要调用不同的函数

function func1() {
    // function body
}
function func2() {
    // function body
}

doSomething(func1);
doSomething(func2);

就是代码中硬编码数据和动态获取数据之间的区别

例如,在后端,您制作代码,以便它能够满足不同用户的不同需求。。。同时,同样的代码

所以在这个例子中:

function doSomething(cb) {
  console.log("this function receives callback function");
  cb();
}
function func1() {
  // function body
}
function doSomething() {
  console.log("this function receives callback function");
  func1();
}
您可以构建一个函数,根据它接收到的cb为不同的用户提供不同的信息

在本例中:

function doSomething(cb) {
  console.log("this function receives callback function");
  cb();
}
function func1() {
  // function body
}
function doSomething() {
  console.log("this function receives callback function");
  func1();
}

它只运行一个特定的函数func1,就是这样

您可以传递一个回调,以便在异步操作完成后配置“下一步将发生什么”,而不是硬编码异步函数来执行特定的操作。(尽管回调与异步无关,但看看array
map
forEach
就知道了。)至于承诺的好处,这是一个单独的问题,因此应该单独问。这网上有很多资源,我建议你用谷歌搜索,而且如果你长时间使用这两种资源,在我看来,这两种资源的优势是非常明显的。