我已经开发了几年的JavaScript,我根本不理解有关承诺的大惊小怪.
似乎我所做的只是改变:
api(function(result){
api2(function(result2){
api3(function(result3){
// do work
});
});
});
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以使用像async这样的库,例如:
api().then(function(result){
api2().then(function(result2){
api3().then(function(result3){
// do work
});
});
});
Run Code Online (Sandbox Code Playgroud)
哪个代码更多,可读性更低.我没有在这里获得任何东西,它也不会突然神奇地"平坦".更不用说必须将事物转换为承诺.
那么,这里的承诺有什么大惊小怪?
由于JavaScript在单个线程中运行,在发出AJAX请求后,后台实际发生了什么?我想更深入地了解这一点,任何人都可以解释一下吗?
规范说(第 5 段):
来自单个作业队列的 PendingJob 记录始终以 FIFO 顺序启动。本规范未定义服务多个作业队列的顺序。ECMAScript 实现可以将作业队列的 PendingJob 记录的 FIFO 评估与一个或多个其他作业队列的 PendingJob 记录的评估交织在一起。
这是否意味着我不能指望在其他同步控制流中.then提供回调之前评估提供的回调setTimeout?
换句话说,我可以依赖以下打印吗one two?
setTimeout(() => console.log('two'));
Promise.resolve().then(() => console.log('one'));Run Code Online (Sandbox Code Playgroud)