美文网首页
2019阿里前端测试题

2019阿里前端测试题

作者: One_Hund | 来源:发表于2018-08-18 14:47 被阅读0次

一、题目:

实现mergePromise函数,把传进去的数组顺序先后执行,并且把返回的数据先后放到数组data中
//实现mergePromise函数,把传进去的数组顺序先后执行,
//并且把返回的数据先后放到数组data中

const timeout = ms => new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve();
    }, ms);
});

const ajax1 = () => timeout(2000).then(() => {
    console.log('1');
    return 1;
});


const ajax2 = () => timeout(1000).then(() => {
    console.log('2');
    return 2;
});

const ajax3 = () => timeout(2000).then(() => {
    console.log('3');
    return 3;
});

const mergePromise = ajaxArray => {
    // 在这里实现你的代码

};

// mergePromise([ajax1, ajax2, ajax3])

mergePromise([ajax1, ajax2, ajax3]).then(data => {
    console.log('done');
    console.log(data); // data 为 [1, 2, 3]
});



// 分别输出
// 1
// 2
// 3
// done
// [1, 2, 3]

二、参考答案:


const timeout = ms => new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve();
    }, ms);
});
 
const ajax1 = () => timeout(2000).then(() => {
    console.log('1');
    return 1;
});
 
const ajax2 = () => timeout(1000).then(() => {
    console.log('2');
    return 2;
});
 
const ajax3 = () => timeout(2000).then(() => {
    console.log('3');
    return 3;
});
 
const mergePromise = ajaxArray => {
    // 在这里实现你的代码
    let data = [];
    let prom = Promise.resolve();
    ajaxArray.forEach(ajax => {
        prom = prom.then(ajax).then(res => {
             data.push(res);
             return data;
        }); 
    })
 
    return prom;
};
 
mergePromise([ajax1, ajax2, ajax3]).then(data => {
    console.log('done');
    console.log(data); // data 为 [1, 2, 3]
});
 
// 分别输出
// 1
// 2
// 3
// done
// [1, 2, 3]

三、题解:

答案可拆分为:
const mergePromise = ajaxArray => {
    // 在这里实现你的代码
    let data = []
    let prom = Promise.resolve() // prom①

    prom = prom // prom② = prom①.then()...
    .then(ajaxArray[0])
    .then(res => {
        data.push(res)
        return data
    }); 

    prom = prom  // prom③ = prom②.then()...
    .then(ajaxArray[1])
    .then(res => {
        data.push(res)
        return data
    }); 

    prom = prom  // prom④ = prom③.then()...
    .then(ajaxArray[2])
    .then(res => {
        data.push(res)
        return data
    }); 

    return prom  // prom④
}
  • 下一步的prom需等待上一步的prom运行完成,因为是链式调用,具体可看下面的继续拆分

上面的例子可继续拆分为:
const mergePromise = ajaxArray => {
    // 在这里实现你的代码
    let data = []

    return Promise.resolve()
    .then(ajaxArray[0])
    .then(res => {
        data.push(res)
        return data
    })
    .then(ajaxArray[1])
    .then(res => {
        data.push(res)
        return data
    })
    .then(ajaxArray[2])
    .then(res => {
        data.push(res)
        return data
    })
};
  • 其实就是链式调用,then都会返回Promise对象

四、其他答案(async/await)

const mergePromise = ajaxArray => {
    // 在这里实现你的代码
    let data = []
    let item
    async function loop(){
        while(ajaxArray.length){
            item = await (ajaxArray.shift())()
            data.push(item)
        }
        return data
    }
    return Promise.resolve(loop())
};

相关文章

  • 2019阿里前端测试题

    一、题目: 实现mergePromise函数,把传进去的数组顺序先后执行,并且把返回的数据先后放到数组data中 ...

  • 阿里巴巴提前批前端编程测评思考

    阿里巴巴提前批前端编程测试题 这道题是阿里巴巴2017年7月秋招提前批,前端岗位的编程测评题,原题是给出了html...

  • 阿里测试题

    1 熟悉哪种C/C++编译器?请列出该编译器的常用编译选项并附说明 1 VS2017 windows下VS2017...

  • 前端测试题

    HTML+CSS 1.div垂直水平居中?2.css盒子模型包含哪些?3.如何实现左边固定宽度右边自适应?4.什么...

  • 前端团队

    阿里巴巴 FED github 淘宝前端团队 UED 阿里巴巴国际用户体验设计团队 AMFE 阿里无限前端团队 T...

  • 前端埋点技术文档

    前端监控和前端埋点方案设计 阿里前端监控实践

  • 阿里前端面试

    阿里前端面试

  • 前端代码是怎样智能生成的?

    导读:作为阿里经济体前端委员会四大技术方向之一,前端智能化项目经历了 2019 双十一的阶段性考验,交出了不错的答...

  • 同样做前端,为何差距越来越大?

    阿里妹导读:前端应用越来越复杂,技术框架不断变化,如何成为一位优秀的前端工程师,应对更大的挑战?今天,阿里前端技术...

  • 前端 Leader 如何做好团队规划?阿里内部培训总结公开

    阿里妹导读:作为一名前端团队的管理者,如何做好团队规划?老板不是前端,如何做出被认可的成绩?今天,阿里前端技术专家...

网友评论

      本文标题:2019阿里前端测试题

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