标签异步下的文章

刘涛 发布于 12月27, 2016

Promise介绍--异步篇

这部分内容源于知乎上的一个提问

setTimeout(function(){console.log(4)},0);
new Promise(function(resolve){
    console.log(1)
    for( var i=0 ; i<10000 ; i++ ){
        i==9999 && resolve()
    }
    console.log(2)
}).then(function(){
    console.log(5)
});
console.log(3);

// 1
// 2
// 3
// 5
// 4

之前我们说过then方法添加的回调函数都是异步执行的,所以按照我们正常的认知,结果应该是12345,因为4是先添加到异步队列,而5在之后添加到异步队列。

知乎的问题也有何幻大神详细的讲解。这里我就简单的说一下吧。

我们都知道javascript是单线程的,也就是说,一个时间只能做一件事。所以,所有的任务都要按照一定的顺序排队,然后一个一个执行。如果所有的任务都是同步的,那就没有什么问题,代码按照从前到后的顺序依次执行就可以了,但我们实际工作过程中,难免会有一些操作需要异步执行——比如事件,比如ajax,比如setTimeout

阅读全文 »

刘涛 发布于 12月27, 2016

Promise介绍--Deferred及jQuery篇

最近懒癌发作,说好的系列文章,写了一半,一直懒得写,今天补上一篇。

Deferred

我们在使用promise对象时,总会提到一个与它关系密切的对象——Deferred。其实Deferred没什么内容可讲的,其实很简单。

  • 它包含一个promise对象

  • 它可以改变对应的promise的状态

简单的实现如下:

class Deferred{
    constructor(){
        let defer = {};
        defer.promise = new Promise((resolve, reject)=>{
            defer.resolve = resolve;
            defer.reject = reject;
        })
        return defer;
    }
}

我们知道promise对象内部的状态,本身是在创建对象时传入的函数内控制,外部是访问不到的,Deferred对象在它的基础上包装了一层,并提供了两个在外部改变它状态的方法。

阅读全文 »

刘涛 发布于 12月11, 2016

promise介绍--实现篇

今天,我带着大家一步一步跟着规范实现一个自己的Promise,大家可以对照我的第二篇文章Promise介绍--规范篇或官方规范来一一学习。

Promise内部有三个固定的状态,我们在文件中提前定义。

const PENDING = "pending"
const FULFILLED = "fulfilled"
const REJECTED = "rejected"

阅读全文 »

刘涛 发布于 12月08, 2016

Promise介绍--规范篇

本篇文章是Promise系列文章的第二篇,主要是讲解基于Promise/A+规范,在传入不同类型的参数时,promise内部分别会如何处理。本章的主要目的是让大家对promise有一个更加深入的理解,也为下一篇讲如何实现一个promise库做准备。(写完之后觉得好水。。。)

英文版本的规范见这里

在此,我主要是通过使用例子,讲解一下规范中then方法和Promise Resolution Procedure的每一种情况。

阅读全文 »