JavaScript的一些思考,关于Promise

2017-09-14  本文已影响8人  剑来___

  Promise的产生源于JavaScript对异步编程的需求,以前的js,都是单线程的,但是,ajax技术出来之后,异步就成了网络请求中的主流。
  当我们需要确保某段代码在谁谁之后执行,我们就可以利用函数调用栈,将我们想要调用的代码放入回掉函数之中。

function test() {
    console.log('想要调用的代码')
}

function callback(test) {
    //.........之前调用的代码
    test();
}

  这样的话,就造成了传说中的回调地狱。代码可读性及其差。

ar fn = function(num) {
    return new Promise(function(resolve, reject) {
        if(typeof num == 'number') {
            resolve(num)
        } else {
            reject('TypeError')
        }
    })
}

fn(2).then(function(num) {
    console.log('first:' + num)
    return num + 1
}).then(function(num) {
    console.log('second:' + num)
    return num + 1
}).then(function(num) {
    console.log('third:' + num)
    return num + 1
})

  引入Promise之后的写法就相对可读性好一点。Promise对象有三个状态,pending、resolved、rejected。Promise对象的回调函数中reject()和resolve()是两个状态修改方法。pending只能修改为resolved或者rejected。

var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
}); 

Promise.all([p1, p2, p3]).then(values => { 
  console.log(values); // [3, 1337, "foo"] 
});
上一篇 下一篇

猜你喜欢

热点阅读