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使用需要注意的地方及简单使用。深入理解的话可以查找别的大佬写的资料。