avatar

目录
JavaScript之串行Promise实现
  1. 问题:Promise原生语法,then的链式调用实现的promise串行执行不太语义化(声明式),语法稍微有点繁杂;

    javascript
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    new Promise((resolve, reject) => {
    // Promise #1
    resolve();
    })
    .then(result => {
    // Promise #2
    return result;
    })
    .then(result => {
    // Promise #3
    return result;
    });
  2. 解决方法:a. reduce;b. async/await;

    javascript
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // 1. reduce
    const runPromiseByQueue = (promises) => {
    promises.reduce(
    (previousPromise, nextPromise) => previousPromise.then(() => nextPromise()),
    Promise.resolve()
    )
    }

    // 2. async/await
    const runPromiseByQueue = async(promises) => {
    for (let elem of promises) {
    await elem();
    }
    }

    // 使用
    function createPromise(time, id) {
    return () => new Promise(resolve =>
    setTimeout(() => {
    console.log('promise ', id);
    resolve();
    }, time)
    )
    }
    runPromiseByQueue([
    createPromise(300, 1),
    createPromise(200, 2),
    createPromise(100, 3),
    ])
文章作者: 盛顺炎
文章链接: https://www.shengshunyan.xyz/2018/10/30/JavaScript%E4%B9%8B%E4%B8%B2%E8%A1%8CPromise%E5%AE%9E%E7%8E%B0/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 果实的技术分享
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论