美文网首页
循环串行异步 Promise

循环串行异步 Promise

作者: 书SHU | 来源:发表于2018-05-09 14:14 被阅读78次

    有时候会有这一种需要,需要在循环中执行一系列操作。但是循环的每次迭代的操作是异步的,此时如何实现“异步串行”呢?

    先看一下例子,在没有循环时,如果串行:

    new Promise((resolve, reject) => {
        new Promise((resolve, reject) => {
            // ... 一些异步操作
            return resolve(data)  // 返回这个 promise
        })
    })
    .then(() => {
        ...
    })
    .then(...)
    .then(...)
    

    转换为循环:
    (思路为,每次 for 时候的 promise 为上一次迭代的 promise.then,即可串联起来)

    function runSerial(lists, asyncTask) {
        let promise = Promise.resolve()
            _.each(lists, (i) => {
            promise = promise.then(() => asyncTask(i))
        })
        return promise
    }
    

    调用方法:

    runSerial(self.apps, (app) => {
        const data = {
            ...
        }
    
        return new Promise((resolve, reject) => {
            self.$http.post(url, data).then(({data: {status, data}}) => {
                // ...
                resolve()
            })
        })
    }).finally((res) => {
        ...
    })
    

    相关文章

      网友评论

          本文标题:循环串行异步 Promise

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