我知道javascrip是一个单线程应用程序。我认为要实现异步编程,它将同步执行程序的不同部分。
对于诺言,它不会停止执行以解决诺言。它只是执行另一部分,我的问题是诺言解决后会发生什么。它只是停止当前执行并开始promise的随后部分,或者仅在完成当前执行之后才执行thenpart
答案 0 :(得分:0)
不。当前的代码队列将在返回兑现承诺之前运行。这包括“ then”方法。
答案 1 :(得分:0)
承诺使用“继续传递样式”(“ CPS”)。
CPS的节点方法是异步函数接受回调。像这样:
E:\>python -mpip install —upgrade Pip
Collecting pip
Downloading https://files.pythonhosted.org Packages 'c2 d7 D0f34c60d83a6c5631cf71dfe64cc1054598c843e0211400e55675c. pip-18.1 -PYS.py3 -none -any.whl (1.3MB)
-----------------100% 1.3MB 155kB/s
Installing collected packages: pip
Found existing installation: pip 10.0.1
Uninstalling pip-10.0.1:
Successfully uninstalled pip-10.0.1
Rolling back uninstall of pip
File"C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\configparser.py", line 1079, in _read
raise MissingSectionHeaderError(fpname, lineno, line)
configparser.MissingSectionHeaderError: File contains no section headers.
file: 'setup.cfg', line: 1
'<?xml version="1.0" encoding="utf-8"?>\n'
显式承诺(即不是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
回调函数是一个“延续”,您可以将该延续提供给 异步函数,知道它将最终以非阻塞任务的结果被调用。
至少在表面上,承诺通常看起来相似。实际上,通过使用一些冗长但非神奇的CPS代码以及超时或事件来提供相同的界面,可以实现无用的polyfill(通常不需要)。我怀疑现代JS引擎使用某种不依赖CPS的较低级机制将数据连接到“回调”中。