ECMAScript 2015,也称为 ES6,引入了 JavaScript Promise 对象,用于异步执行运行时间较长的任务。 有两种方式来实现异步编程: 一是使用Promise对象,二是使用async关键字

使用Promise对象

基本用法如下:

    /**
     * 使用Promise对象执行一个任务
     */
    var promise = new Promise((resolve, reject) => {
        setTimeout(function() {
            resolve('promise end');
        }, 1000);
    });
    console.log("main process start")
    
    /**
	then可以传入成功和失败的回调函数
     */
    promise.then((msg) => {
        console.log(msg);
    })
    console.log("main process stopped");

执行结果:

main process start
main process stopped
promise end

使用async关键字

更简单的方法是使用async关定义一个异步函数:

     /**
      * 测试辅助函数: 回调函数
      */
    function callback(str){
        console.log(str);
    }

    /**
     * 测试辅助函数: sleep函数用于模拟长时间执行任务
     **/
    function sleep (time) {
      return new Promise((resolve) => setTimeout(resolve, time));
    }

    /**
     * 异步函数
     */
    async function func1(callback) {
      await sleep(3000);
      callback("func1 callback");
      return "func1 return";
    }

    /**
     * 通过回调和返回值两种方式获得异步函数处理的结果
     */
    console.log("main process start")
    func1(callback).then(res=>{
      console.log(res);
    });
    console.log("main process stopped");

执行结果:

main process start
main process stopped
func1 callback
func1 stopped
func1 return