Javascript单线程编程实现



我知道javascrip是一个单线程应用程序。我认为要实现异步编程,它会同步执行程序的不同部分。

在承诺的情况下,它不会停止执行以解决承诺。它只是执行了另一部分,我的问题是当承诺实现时会发生什么。它只是停止当前执行并启动承诺的然后部分,或者只有在完成当前执行后才执行然后部分

否。当前的代码队列将在返回以履行承诺之前运行。这包括"then"方法。

Promises使用"延续传递样式"("CPS"(。

CPS的节点方法是异步函数接受回调。像这样:

const FS = require('fs')
FS.readFile( path, 'utf8', function callback(error, data) {
// FS.readFile will invoke this function with an error or the file contents
// once the read operation is complete
})

一个明确的承诺(即不是async/await(看起来非常相似:

const myPromise = new Promise(function callback(resolve, reject) {
// invoke the non-blocking thing, then use resolve or reject to pass something onward
} )

回调函数是一个"continuation",您将该continuation提供给异步函数知道它最终将被非阻塞任务的结果调用。

承诺通常看起来很相似,至少在表面上是这样。Promise polyfill(通常不需要(实际上是通过使用一些毛茸茸但不神奇的CPS代码,加上超时或事件来提供相同的接口。我怀疑现代JS引擎使用某种较低级别的机制,这种机制不依赖于CPS将数据连接到"回调"中

最新更新