Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
什么时候应该在typescript中使用回调函数?_Typescript - Fatal编程技术网

什么时候应该在typescript中使用回调函数?

什么时候应该在typescript中使用回调函数?,typescript,Typescript,我曾经编写过C/C++代码,我刚刚开始学习TS。有一件事让我特别困惑,那就是TS并不总是自顶向下运行。与下面的示例一样,它将打印2 1 function first(){ // Simulate a code delay setTimeout( function(){ console.log(1); }, 500 ); } function second(){ console.log(2); }

我曾经编写过C/C++代码,我刚刚开始学习TS。有一件事让我特别困惑,那就是TS并不总是自顶向下运行。与下面的示例一样,它将打印2 1

    function first(){
      // Simulate a code delay
      setTimeout( function(){
        console.log(1);
      }, 500 );
    }
    function second(){
      console.log(2);
    }
    first();
    second();

但是,我怎么知道一个函数是否可以足够快地执行,从而使程序能够以自顶向下的模式运行呢?我可以想象,如果我在整个程序中继续使用递归回调来模拟自上而下的模式,那将是一个完全混乱的局面。

你需要学习基本的javascript来理解它是如何工作的。有一种叫做“事件循环”的东西导致了这种行为。简而言之,setTimeout函数转到回调队列并进入回调堆栈。当堆栈中的所有进程都执行时,将从回调堆栈执行进程。你可以做一件有趣的事。将时间设置为0,然后查看发生了什么


javascript不是一种异步语言。正是这个事件循环概念使javascript异步工作,但在幕后,一切都是同步工作的,就像在c/c++

中一样,您需要学习基本的javascript才能理解它是如何工作的。有一种叫做“事件循环”的东西导致了这种行为。简而言之,setTimeout函数转到回调队列并进入回调堆栈。当堆栈中的所有进程都执行时,将从回调堆栈执行进程。你可以做一件有趣的事。将时间设置为0,然后查看发生了什么


javascript不是一种异步语言。正是这个事件循环概念使javascript异步工作,但在幕后,一切都是同步工作的,就像在c/c++

中一样。2019年,你不应该使用回调。相反,你应该使用

这允许开发人员选择使用回调或使用更现代的异步/等待

例如:

功能优先{ //模拟代码延迟 返回新PromiseSolve=>{ 设置超时=>{ console.log1; 决定 }, 500; }; } 功能秒{ console.log2; } 异步=>{ 先等; 第二
}; 可以说在2019年,你不应该使用回调。相反,你应该使用

这允许开发人员选择使用回调或使用更现代的异步/等待

例如:

功能优先{ //模拟代码延迟 返回新PromiseSolve=>{ 设置超时=>{ console.log1; 决定 }, 500; }; } 功能秒{ console.log2; } 异步=>{ 先等; 第二
}; Typescript在编译时传输到Javascript。因此,在运行时没有Typescript,只有Javascript

Javascript引擎实现了两个队列:事件队列和微任务队列。后者具有更高的优先级,用于承诺

考虑以下代码及其打印输出:

console.log'start'; setTimeoutfunction{//队列到事件队列 console.log'timeout'; }, 0; Promise.resolve.then函数{//队列到微任务队列 console.log'promise1'; }.Then函数{console.log'promise2';};//队列到微任务队列 console.log'end'; 开始 结束//打印后当前调用堆栈为空,请查看队列 promise1//从微任务队列中退出并处理任务 promise2//忽略主事件队列,继续执行上述操作 超时//微任务队列为空,因此退出队列并处理事件队列中的事件
Typescript在编译时传输到Javascript。因此,在运行时没有Typescript,只有Javascript

Javascript引擎实现了两个队列:事件队列和微任务队列。后者具有更高的优先级,用于承诺

考虑以下代码及其打印输出:

console.log'start'; setTimeoutfunction{//队列到事件队列 console.log'timeout'; }, 0; Promise.resolve.then函数{//队列到微任务队列 console.log'promise1'; }.Then函数{console.log'promise2';};//队列到微任务队列 console.log'end'; 开始 结束//打印后当前调用堆栈为空,请查看队列 promise1//从微任务队列中退出并处理任务 promise2//忽略主事件队列,继续执行上述操作 超时//微任务队列为空,因此退出队列并处理事件队列中的事件
如果你在第一个睡眠中使用C++并产生一个线程,它的睡眠时间是5毫秒,那么STD::CUTs,它会不会让它的输出来得晚些?如果你C++,并在第一个线程中产生一个线程,它的睡眠时间是500毫秒,那么STD::CUTs,它会不会让你惊讶它的输出会在以后?嗨,Gman,谢谢你的回复!我读了你推荐的文件。只是想确认我的理解是正确的,asycn实际上并不取决于/触发函数的运行速度,而是取决于配置是否放入队列?正如我的问题所描述的,一个复杂的cal
计算实际上不会自动设置为并行运行?正确,复杂的计算不会并行运行。在JavaScript中并行运行东西的唯一方法是使用.Hi@gman,谢谢你的回复!我读了你推荐的文件。只是想确认我的理解是正确的,asycn实际上并不取决于/触发函数的运行速度,而是取决于配置是否放入队列?因此,正如我在问题中所描述的,一个复杂的计算实际上不会自动设置为并行运行?正确,一个复杂的计算不会并行运行。在JavaScript中并行运行东西的唯一方法是使用。