parallel、sequencial and race

68 阅读1分钟
const promisify = (item,delay) =>
    new Promise((resolve)=>
        setTimeout(()=>
            resolve(item),delay));

const a =()=> promisify('a',100);
const b =()=> promisify('b',5000);
const c =()=> promisify('c',3000);

//parallel-并行

async function parallel(){
    const promises = [a(),b(),c()];
    const [output1,output2,output3] = await Promise.all(promises);
    return `parallel is done: ${output1} ${output2} ${output3}`;
}
//parallel().then(console.log) === parallel().then(data=>console.log(data))
//parallel().then(console.log)

//race
/*Promise.race与Promise.all一样,也接受Promise对象或普通数组(或其他迭代对象)作为参数,
返回一个Promise实例对象。区别在于,一旦有一个Promise实例对象resolve,
它就立即把这个resolve的值作为Promise.race  resolve的值。
一旦有一个reject,Promise.race 也会马上reject */

async function race(){
    const promises = [a(),b(),c()];
    const output1=await Promise.race(promises);
    return `race is done: ${output1}`;
}

//race().then(console.log)

//sequence--串行
async function sequence(){
    const output1 = await a();
    const output2 = await b();
    const output3 = await c();
    return `sequence is done: ${output1} ${output2} ${output3}`;
}

//sequence().then(console.log)

//异步请求,所以这三个方法的调用先后不重要
parallel().then(console.log)
race().then(console.log)
sequence().then(console.log)
//同时执行这三个方法的结果对比,race > parallel > sequence