Skip to content

Javascript异步理解 #7

@marlonfan

Description

@marlonfan

直接扔代码

interface TaskFunction {
    (done: (result?: any) => void): void;
}

function all(taskFns: TaskFunction[], callback: (results: any[]) => void): void {
    var results: string[] = []; 

    var pending = taskFns.length;

    taskFns.forEach((taskFn, index) => {
        taskFn(result => {
            if (index in results) {
                return;
            }

            results[index] = result;

            if (--pending == 0) {
                callback(results);
            }
        });
    });
}

all([
    done => {
        done('hello');
    },
    done => {
        setTimeout(() => {
            done(', ');
        }, 100);
    },
    done => {
        setInterval(() => {
            done('world');
        }, 1000);
    },
    done => {
        done('!');
    }
], results => {
    console.log(results.join('')); // 输出 hello, world!
})

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions