我知道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将数据连接到"回调"中