ES6 中Promise对象与asyc函数

2 篇文章 0 订阅

1:ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。

console.log('World!');

let promise = new Promise(function(resove, reject) {
            console.log('promise');
            resove();
        });

 promise.then(() => {
        console.log('resolved.');
        }).catch((err) => {
           console.log("error");
       })

console.log('Hi!');

 

在不设置回调函数的情况下,控制台输出:

World!
promise
Hi!

在设置回调函数的情况下,控制台输出:

World!
 promise
 Hi!
resolved.

注意:

// Promise也有一些缺点。首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消
// 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部

//立即 resolved 的 Promise 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务

/Promise.all(iterable) 方法返回一个 Promise 实例
 //如果所有传入的 promise 都变为完成状态,或者传入的可迭代对象内没有 promise,Promise.all 返回的 promise 异步地变为完成

var p1 = Promise.resolve(3);
        var p2 = 1337;
        var p3 = new Promise((resolve, reject) => {
            setTimeout(resolve, 100, 4);
        });

        Promise.all([p1, p2, p3]).then(values => {
            //     let [p1, p2, p3] = values;
            //     console.log(p1);
            //     console.log(p2);
            //     console.log(p3);
            values = values.map((item) => Number(item) + 1)
            console.log(values); // [3, 1337, "foo"] 
        });

 

 

2:async函数返回一个 Promise 对象

async函数返回的 Promise 对象必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误
也就是说,只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数  
console.log("11");        
async function f() {
            console.log("我先执行了");
          // 等同于
          // return 123;
          return await 123;
        }
        f().then(v => console.log(v))
        console.log("最后执行吗?")        

 

在不设置回调函数的情况下,控制台输出:

11
最后执行吗?

在设置回调函数的情况下,控制台输出:

11
我先执行了
最后执行吗?
123

总结:promise对象一旦建立立即执行,不管有没有设置回调函数都会进行,async等到await后面异步对象全部执行完成才会调用回调函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值