Javascript单线程编程实现

时间:2018-11-30 05:33:01

标签: javascript asynchronous promise single-threaded

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

对于诺言,它不会停止执行以解决诺言。它只是执行另一部分,我的问题是诺言解决后会发生什么。它只是停止当前执行并开始promise的随后部分,或者仅在完成当前执行之后才执行thenpart

2 个答案:

答案 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的较低级机制将数据连接到“回调”中。