1.Promise 对于Promise的理解就是一个对象,只不过是可以异步执行的一个对象。
Promise 对象是一个返回值的代理,这个返回值在promise对象创建时未必已知。它允许你为异步操作的成功返回值或失败信息指定处理方法。 这使得异步方法可以像同步方法那样返回值:异步方法会返回一个包含了原返回值的 promise 对象来替代原返回值。 ——MDNPromise对象有以下三个状态 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使用需要注意的地方及简单使用。深入理解的话可以查找别的大佬写的资料。