原文地址:https://dev.to/bhagatparwinder/promises-introduction-5d30
導讀
回調(diào)函數(shù)對于處理耗時任務或后續(xù)會被阻塞的操作很有幫助求豫,但我們也看到了它的一些缺點镊逝,特別是回到地獄汞窗。
為了解決回調(diào)函數(shù)的弊端镀琉,引入了 promise顿肺,它倆之間的關鍵區(qū)別是什么時候使用回調(diào)君纫,我們可以向函數(shù)中傳遞一個回調(diào)奸鬓,然后等到執(zhí)行回調(diào)函數(shù)后可以得到結(jié)果竿开。而在 promise 中谱仪,我們是在 promise 的返回值中使用回調(diào)。
優(yōu)勢
創(chuàng)建
我們使用 Promise
構(gòu)造函數(shù)來創(chuàng)建 promise:
const myPromise = new Promise();
一個 promise 就像一張收據(jù)說我將來需要你的值筷转,Promise 一旦完成(resolve 返回成功信息或 reject 返回錯誤信息),我們將會執(zhí)行后續(xù)動作(例如從后端獲取員工信息)悬而。
Resolve
promise 為了完成異步任務呜舒,時間是不固定的。當異步任務還在執(zhí)行的時候笨奠,promise 處在 pending 狀態(tài)袭蝗。一旦完成它將返回值(通常是從異步任務返回的)。
const myPromise = new Promise((resolve) => { setTimeout(() => { resolve("finished async operation"); }, 2000);});myPromise.then((response) => { console.log(response); // finished async operation});
發(fā)生了什么:
Reject
有時候異步任務并不總是按預期返回,我們可能會遇到錯誤晋辆。這種情況下渠脉,我們使用 reject
來提示失敗信息。
const myPromise = new Promise((resolve, reject) => { setTimeout(() => { reject("an error has occurred"); }, 2000)});myPromise.then((response) => { console.log(response);}, (error) => { console.log(error); // an error has occurred});
promise 中的回調(diào)接收兩個參數(shù):resolve
和 reject
瓶佳。promise 中的then
操作符能處理兩個回調(diào)函數(shù)芋膘,第一個是處理成功的(resolve),第二個是處理失敗的(reject)霸饲。
在這個例子中为朋,myPromise
2 秒后產(chǎn)生一個錯誤,只要使用它的都會得到提示:“an error has occurred”厚脉。
這篇文章只是簡單的介紹了 promise 的一些知識习寸,在下一篇文章中,我們將會重溫鏈式操作傻工、錯誤處理以及并行執(zhí)行 promise霞溪。