美文网首页
Asynchronism - 单线程中的异步行为

Asynchronism - 单线程中的异步行为

作者: 萧沪椿Helson | 来源:发表于2017-08-29 14:32 被阅读0次

Python 是支持多线程/多进程的一种语言,当我们编写一个带背景音乐的游戏时,为了确保音乐和画面都能运行,我们会给音乐另开一个线程,然后 Python 会在多个线程间来回运行。由于计算机运行速度很快,这就实现了「视觉上同时运行」的效果。

然而 JS 却是一门单线程的语言 … 这让我很不习惯,如果音乐播放 10 秒,那么画面就需要 10 秒以后再变化了吗?为了满足这种同时运行的需求,JS 引入了异步模式(区别于一句等一句的同步执行)。相当于变相的多线程。

React 是个异步的 JS 框架,我用它写了一个 TodoList,过程中没少被异步带进坑里。在我还没认识到有异步这种操作的时候,我一直感到有莫名的 BUG 出现,后来才明白是因为程序的运行并不是同步的。

比如说:

$.ajax({
url: `http://127.0.0.1:8000/api/tasks/${currentTodo.id}`,
type: 'put',
dataType: 'json',
data: currentTodo,
});
this.props.appState.isEditing = false;

这里的 ajax 方法就是典型的异步方法,在它还没执行完的情况下,this.props.appState.isEditing = false; 就开始执行了。。。如果你想要确保第二句必须在第一句执行完之后再执行,ajax 自身提供了回调函数。

$.ajax({
url: `http://127.0.0.1:8000/api/tasks/${currentTodo.id}`,
type: 'put',
dataType: 'json',
data: currentTodo,
success: function() {
    this.props.appState.isEditing = false;
},
});

把第二句话放进去,这样才能确保结果符合你的预期。

这也就是说,当执行完第一行代码,它不会立刻执行下一行,而是去执行它的回调函数。而第二行代码不会等第一行执行完毕才加载,当第一行开始后,第二行也开始了。

这是 JS 中单线程异步行为的明显特征,如果不搞清楚,很容易写出 BUG 来。

学习资料

http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html

http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html

相关文章

  • Asynchronism - 单线程中的异步行为

    Python 是支持多线程/多进程的一种语言,当我们编写一个带背景音乐的游戏时,为了确保音乐和画面都能运行,我们会...

  • Promise入门详解和基本用法

    异步调用 异步 JavaScript的执行环境是单线程。 所谓单线程,是指JS引擎中负责解释和执行JavaScri...

  • 16.3 JavaScript的执行机制

    浏览器事件轮询机制 js执行为单线程 网络请求、setTimeout、addEventListener属于异步事件...

  • 3.1KOA Promise 语法

    Promise 语法 同步与异步 我们知道,JavaScript的执行环境是「单线程」。所谓单线程,是指JS引擎中...

  • async学习笔记记录

    JS中的异步处理。 在javascript中,语言的执行环境是”单线程”。所谓“所谓"单线程",就是指一次只能完成...

  • Node 简介

    Node的特点 Node的特点有:异步I/O、事件与回调函数、单线程、跨平台 异步I/O 在Node中,异步I/O...

  • js的单线程和异步

    js的单线程和异步 js是一直是单线程的,浏览器才是实现异步的那个家伙

  • js 异步全览

    问题! JS 为什么是单线程的? 为什么需要异步? 单线程又是如何实现异步的呢? promise 的优点是什么? ...

  • 异步流程控制

    单线程与异步 JavaScript是单线程运行、支持异步机制的语言。进入正题之前,我们有必要先理解这种运行方式。 ...

  • [贝聊科技]异步流程控制

    单线程与异步 Javascript是单线程运行、支持异步机制的语言。进入正题之前,我们有必要先理解这种运行方式。 ...

网友评论

      本文标题:Asynchronism - 单线程中的异步行为

      本文链接:https://www.haomeiwen.com/subject/yjmodxtx.html