Callback 和 Promise 如何在 javascript 中实现 Async 属性?

How Callback and Promise Achieve Async Property in javascript?

我怀疑 JavaScript 是一种单线程同步编程语言。而且它只有一个 Callstack .then Callback 和 promise 如何实现 Asycrones 属性?

他们没有。回调和承诺不会使任何异步。相反,回调和 Promises 是允许异步函数与其余代码交互的设计模式。

下面是两个回调的例子,一个是同步的,一个是异步的:

function a (input, callback) {
    callback(input * 2);
}

function b (input, callback) {
    setTimeout(() => callback(input *2), 100);
}

console.log('start!');

a(100, x => console.log(x));
b(1000, x => console.log(x));

console.log('end!');

输出应该是:

start!
200
end!
2000

回调不会使任何异步,而是一种允许异步代码与代码的其他部分交互的技术。

Promises 会重新安排您的 .then() 回调,因为它就是这样设计的。但它所做的只是在代码末尾执行 .then() 。仅此而已,它不会在单独的线程中执行 .then() 回调。

它稍后如何执行您的代码?嗯,你的代码是一个函数。它只是稍后调用它。后面怎么调用呢?它只是将您的功能添加到需要稍后完成的事情列表中。在你的代码结束时,解释器将检查这个列表(或列表)以查看它是否需要做任何事情。这部分检查是否需要执行任何内容的代码称为事件循环。 list/lists中需要检查的东西在文档中称为“任务”或“微任务”。

异步函数是异步的。它们是使用 C/C++ 实现的。因此,如果一段 C/C++ 代码使用线程或信号或异步 I/O 它可以让 javascript 解释器使用 javascript 回调等待异步结果(它只是接受稍后将调用的 javascript 函数)或承诺(它 returns 一个 javascript Promise 对象)。