Promise、Async

const fs = require('fs')
const util = require('util')
let readFile = util.promisify(fs.readFile)

let isPromise = (x) => {
    if ((typeof x === 'object' && x != null) || typeof x === 'function') {
        if (typeof x.then === 'function') {

            return true
        }
    }
    return false;
}

Promise.all = (promises) => {
    console.log('all')
    return new Promise((resolve, reject) => {
        let arr = []
        let idx = 0
        let promisesData = (value, index) => {
            arr[index] = value
            if (++idx === promises.length) {
                resolve(arr)
            }
        }
        for (let i = 0; i < promises.length; i++) {
            let x = promises[i]
            if (isPromise(x)) {
                x.then(y => {
                    promisesData(y, i)
                }, reject)
            } else {
                promisesData(x, i)
            }
        }
    })
}

Promise.all([1, readFile('./name.txt', 'utf-8'), readFile('./age.txt', 'utf-8'), 3])
    .then(data => {
        console.log(data)
    })

 

posted @ 2023-01-07 23:20  z_bky  阅读(17)  评论(0)    收藏  举报