美文网首页
js异步3--异步操作的几种方法

js异步3--异步操作的几种方法

作者: Gen_ | 来源:发表于2019-02-15 17:50 被阅读17次

1.回调函数(简单的函数可以使用,复杂的需求容易产生回调地狱)

function getSomething1(fn){

  var num=0;

  setTimeout(function(){

      num=1;

      fn(num);

  },3000)

}

function compute1(x) {

  alert(x * 2);

}

getSomething1(compute1)

2.promise

function getSomething2() {

    var r = 0;

    return new Promise(function(resolve) {

        setTimeout(function() {

            r = 2;

            resolve(r);

        }, 10);

    });

}

function compute2(x) {

    alert(x * 2);

}

getSomething2().then(compute2);

// 下面这部分是对Promise的一个解释:new Promise()是一个函数,

// 内部添加resolve(参数)可以在new Promise()出来的函数后面添加的then()获取得到参数

// var chang = new Promise(function(resolve){

// setTimeout(function(){

// var num = 3;

// resolve(num)

// },10)

// })

// chang.then(function(t){

// console.log(t)

// })

3.generator

function getSomething3() { 

    var r = 0; 

    setTimeout(function() {     

        r = 2;     

        it.next(r); 

    }, 10);

}

function *compute3(it) { 

    var x = yield getSomething3(); 

    alert(x * 2);

}

var it = compute3();

it.next();

// 理解generator

// function* tao () {

// yield 'hello'

// yield 'kat'

// return 'beach'

// }

// var h = tao()

// console.log(h.next())

// console.log(h.next())

// console.log(h.next())

4.promise + generator

function getSomething() { 

    var r = 0; 

    return new Promise(function(resolve) {     

    setTimeout(function() {       

        r = 2;       

        resolve(r);     

    }, 10); 

});

}

function *compute() { 

    var x = yield getSomething(); 

    alert(x * 2);

}

var it = compute();

it.next().value.then(function(value) {

    it.next(value);

});

5.async(异步比较好用)

function getSomething() {

    var r = 0;

    return new Promise(function(resolve) {

        setTimeout(function() {

        r = 2;

        resolve(r);

    }, 10);

});}

async function compute() {

    var x = await getSomething();

    alert(x * 2);

}

compute();

相关文章

网友评论

      本文标题:js异步3--异步操作的几种方法

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