Promise,async,await使用

版权声明:转载请告知 https://blog.csdn.net/qq_27142347/article/details/83385698

1.Promise
对于Promise的理解就是一个对象,只不过是可以异步执行的一个对象。

Promise 对象是一个返回值的代理,这个返回值在promise对象创建时未必已知。它允许你为异步操作的成功返回值或失败信息指定处理方法。 这使得异步方法可以像同步方法那样返回值:异步方法会返回一个包含了原返回值的 promise 对象来替代原返回值。
 ——MDN

Promise对象有以下三个状态
1. resolve
2.reject
3.unresolve: 刚创建后的初始化状态.
一旦状态从unresolve转变成 resolve或者reject后,就不会再发生变化,即在 .then 后执行的函数可以肯定地说只会被调用一次。

const mypromise = new Promise((resolve, reject) => {
	if(1)
	{
		resolve(“成功返回”);//resolve状态  可以没有参数 resolve();
	}
	else 
	{
		reject("失败返回")//reject状态
	}
	mypromise.then((msg)=>{
	//resolve状态的回调函数
	console.log(msg)//成功返回
	}).catch(err=>{
	//reject状态的回调函数
	console.log(err)//失败返回
	})

2.await 与 async
需要注意的地方:
1.async 函数的工作方式
(1)async 函数总是返回一个 Promise 对象 p 。Promise 对象在 async 函数开始执行时被创建。
函数体执行过程中,可以通过 return 或 throw 终止执行。或者通过 await 暂停执行,在这种情况下,通常会在以后继续执行。
(2)返回 Promise 对象 p
async用于定义一个异步函数,该函数返回一个Promise。如果async函数返回的是一个同步的值,这个值将被包装成一个理解resolve的Promise,等同于return Promise.resolve(value) 。
2.await的使用
(1)await用于一个异步操作之前,表示要“等待”这个异步操作的返回值。await也可以用于一个同步的值。可以理解为一个等待协程完成的过程。
(2)await正常后面接一个promise。表示等待这个函数(async)完成。但是也可以接普通函数,普通函数作为一个resolve状态的promise。(正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象。)
(3)await的只能在async函数中使用。

async function f() {
  await Promise.reject('出错了');
} 
f()
.then(v => console.log(v))
.catch(e => console.log(e))
// 出错了
//async可以这样做,因为本质返回一个promise.

另外,可以直接在async函数中直接用try…catch语句。就可以避免then()和catch()的使用。

var sleep = function (time) {
    return new Promise(function (resolve, reject) {
        setTimeout(function () {
            // 模拟出错了,返回 ‘error’
            reject('error');
        }, time);
    })
};
var start = async function () {
    try {
        console.log('start');
        await sleep(3000); // 这里得到了一个返回错误
        // 所以以下代码不会被执行了
        console.log('end');
    } catch (err) {
        console.log(err); // 这里捕捉到错误 `error`
    }
};

以上就是Promise,async,await使用需要注意的地方及简单使用。深入理解的话可以查找别的大佬写的资料。

猜你喜欢

转载自blog.csdn.net/qq_27142347/article/details/83385698