zoukankan      html  css  js  c++  java
  • 阿里前端测试题--关于ES6中Promise函数的理解与应用

    今天做了阿里前端的笔试题目,原题目是这样的

    //实现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]).then(data => {
    console.log('done');
    console.log(data); // data 为 [1, 2, 3]
    });

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

    从网上找到的答案我写贴上:

    var data = [];
    var sequence = Promise.resolve();
    ajaxArray.forEach(function(item){
      sequence = sequence.then(item).then(function(res){
        data.push(res);
        return data;
      });
    })

    return sequence;

    解答思路和原理有空再研究贴上来。

    更新--思路解析:

      首先理解一下javascript的执行机制--异步执行,也就是说两个并列函数的执行顺序不会先执行完第一个,再执行后一个。举个栗子:

    func A(){

      setTimeout(function(){

        console.log('a');

    },3000);

    }

    func B(){

      setTimeout(function(){

        console.log('b');

    },1000);

    }

    A();

    B();

    那么你觉得输出结果是啥?不妨试下,会输出b,a.

    原因就是异步执行。当执行到A函数时,会注册一个三秒后执行的函数,直接去执行B,而不是等三秒执行完A再去执行B。

    promise可以实现同步执行

    先说一下使用方法吧:promise和then配合使用,类似于回调函数,执行完promise之后才会执行then的内容

    new Promise((resolve, reject) {

    }).then(function(){

    }).then(function(){})...

    promise里面的两个参数表示promise的执行状态

    但是值得注意的是then里面的东西可不是同步执行,并不是前一个执行完再执行后一个,then之间还是遵循异步原则的。

    所以JavaScript、nodejs想要实现同步,各路神仙都有自己不同的理解和套路。

    后续更新。

  • 相关阅读:
    隐藏quick launch(非原创)
    MOSS 的缓存及察看
    在ubantu 8.4上 让鼠标的滚轮工作
    关于QuickHTML的开发 (1)
    Jquery 和 shanrepoint
    一个简单的隐藏quick launch的js方法
    在vmware workstation 6.5上安装 vmware tools
    一本有关 MOSS 开发的书 Wrox.SharePoint.2007.and.Office.Development.Expert.Solutions
    IOS 概述
    iPhone应用程序开发基础之一: IBOutlet与IBAction
  • 原文地址:https://www.cnblogs.com/amingxiansen/p/9351415.html
Copyright © 2011-2022 走看看