标签前端下的文章

刘涛 发布于 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对象在它的基础上包装了一层,并提供了两个在外部改变它状态的方法。

阅读全文 »