日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一道笔试题引发的Promise笔记

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一道笔试题引发的Promise笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

近來參加校招筆試,發現有好幾道關于Promise的題目。然而我都沒有了解過。所以,這篇文章以網易筆試的一道題開始,記錄關于Promise的那些事。
文章地址:http://lsxj615.com/2016/08/04...

筆試題

console.log(1); new Promise(function (resolve, reject){reject(true);window.setTimeout(function (){resolve(false);}, 0); }).then(function(){console.log(2); }, function(){console.log(3); }); console.log(4);

請問輸出結果是什么?在揭曉答案之前,我們還是先來了解一下Promise吧。

Promise是什么

Promise 對象用于異步(asynchronous)計算.。一個Promise對象代表著一個還未完成,但預期將來會完成的操作。
Promise 對象是一個返回值的代理,這個返回值在promise對象創建時未必已知。它允許你為異步操作的成功或失敗指定處理方法。 這使得異步方法可以像同步方法那樣返回值:異步方法會返回一個包含了原返回值的 promise 對象來替代原返回值。

Promise的API

Constructor

使用new來調用Promise的構造器進行實例化

var promise = new Promise(function(resolve, reject){//異步處理//處理結束后,調用resolve或reject });

Instance Method

對通過new生成的promise對象為了設置其在resolve(成功)/reject(失敗)時調用的回調函數可以使用promise.then()實例方法

promise.then(onFulfilled, onRejected); //以防誤解,上述的即為以下這種形式 promise.then(function(){...}, function(){...});

當resolve(成功)時,會調用onFulfilled函數;
reject(失敗)時,會調用onRejected函數。
這也對應了前面筆試題中,onFulfilled其實就是console.log(2),也就是說成功時會調用console.log(2),而失敗時,onRejected就是調用console.log(3)。

若只想處理異常情況的函數,可promise.then(undefined, onRejected),當然更好的選擇是用promise.catch()來處理。二者效果相同。

promise.then(function (value) {console.log(value); }).catch(function (error) {console.log(error); });//等同于以下形式 promise.then(function (value) {console.log(value); }, function (error) {console.log(error); });

其他方法

  • Promise.all()

  • Promise.race()

  • Promise.resolve()

  • Promise.reject()

Promise的狀態

Promise對象有三種狀態

  • pending 初始狀態,既不是fulfilled也不是rejected

  • fulfilled 成功。此時調用onFulfilled

  • rejected 失敗。此時調用onRejected

Fulfilled和Rejected都可以表示為Settled。
由下圖可以了解,最初Promise為pending狀態,在執行后轉為settled狀態,而settled狀態分為兩種:在成功后轉為fulfilled,執行.then(onFulfilled)方法;在失敗后轉為reject,執行.then(onRejecttion)或.catch(onRejecttion),進行異步操作,再返回Promise對象,轉為pending狀態。

Promise.resolve & Promise.reject

  • Promise.resolve

    Promise.resolve(value)可認為是new Promise()方法的快捷方式

Promise.value(value);//等同于以下代碼new Promise(function(resolve){resolve(value); });

此時這個promise對象會進入fulfilled狀態。而resolve(value)中的value會傳遞給后面then中指定的onFulfilled函數。

Promise.resolve(value)返回值也是一個promise對象,所以可以進行鏈式調用.

  • Promise.reject

    Promise.reject(error)與上述靜態方法類似,也是new Promise()方法的快捷方式

Promise.reject(new Error("出錯了")); //等同于以下代碼 new Promise(function(resolve, reject){reject(new Error("出錯了")); });

這段代碼則是調用該promise對象通過then指定的onRejected函數,并將錯誤對象(Error)傳遞給onRejected函數。

筆試題解答

話不多說,貼圖就是。

可以知道,當promise調用了reject(true)方法,則傳遞true這個參數給'then'指定的onRejected函數,即題目中的function(){console.log(3);}。但由于.then中指定的方法調用是異步執行的,所以會先執行console.log(4);

本篇文章僅是簡單介紹promise。欲了解更多內容,可查看以下資料。謝謝~

資料來源:

  • Promise- Javascipt | MDN

  • JavaScript Promise迷你書(中文版)

總結

以上是生活随笔為你收集整理的一道笔试题引发的Promise笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。