Javascript訪問(wèn)Promise對(duì)象返回值的操作方法
在Javascript中,什么是Promise
Promise是一個(gè)對(duì)象,表示一個(gè)異步操作的事件完成或失敗。
Promise對(duì)象可以是如下?tīng)顟B(tài):
- pending
- fulfilled
- rejected
最廣泛使用的異步操作的一個(gè)實(shí)例是Fetch API。fetch() 方法返回一個(gè)Promise對(duì)象。
如果我們從后端API獲取一些數(shù)據(jù)。對(duì)于這篇博文,我將使用JSONPlaceholder – 一個(gè)偽造的REST API。我們將獲取一個(gè)id=1的用戶數(shù)據(jù)。
fetch("https://jsonplaceholder.typicode.com/users/1")
讓我們看看如何訪問(wèn)返回?cái)?shù)據(jù)。
1- then() 鏈?zhǔn)讲僮?/h2>
它是最簡(jiǎn)單和最明顯的方式。
fetch("https://jsonplaceholder.typicode.com/users/1") // 1 .then((response)=>response.json()) //2 .then((user) => { console.log(user.address); // 3 });
這里,我們(1)從API獲取數(shù)據(jù),(2)轉(zhuǎn)換為JSON對(duì)象,然后(3)打印用戶地址值到控制臺(tái)。
結(jié)果如下:
{
street: 'Kulas Light',
suite: 'Apt. 556',
city: 'Gwenborough',
zipcode: '92998-3874',
geo: { lat: '-37.3159', lng: '81.1496' }
}
2- 在之后的代碼中使用返回值
但是如果我們想要在之后的代碼中使用返回值,怎么辦?
如果我們嘗試像這樣做(錯(cuò)誤方式?。?/p>
const address = fetch("https://jsonplaceholder.typicode.com/users/1") .then((response)=>response.json()) .then((user) => { return user.address; }); console.log(address);
我們將得到
Promise { <pending> }
得到這種結(jié)果,是因?yàn)镴avascript代碼總是同步執(zhí)行,所以console.log()函數(shù)在fetch()請(qǐng)求后立即開(kāi)始,而沒(méi)有等待直到它解析完成。當(dāng)console.log()函數(shù)開(kāi)始運(yùn)行的時(shí)刻,fetch()請(qǐng)求函數(shù)返回的Promise對(duì)象處于pending狀態(tài)。
那就是說(shuō),我們可以訪問(wèn)另一個(gè) .then() 回調(diào)函數(shù)的Promise對(duì)象的返回值:
const address = fetch("https://jsonplaceholder.typicode.com/users/1") .then((response) => response.json()) .then((user) => { return user.address; }); const printAddress = () => { address.then((a) => { console.log(a); }); }; printAddress();
或使用async/await語(yǔ)法:
const address = fetch("https://jsonplaceholder.typicode.com/users/1") .then((response) => response.json()) .then((user) => { return user.address; }); const printAddress = async () => { const a = await address; console.log(a); }; printAddress();
以這兩種方式,我們將得到:
{ street: 'Kulas Light', suite: 'Apt. 556', city: 'Gwenborough', zipcode: '92998-3874', geo: { lat: '-37.3159', lng: '81.1496' } }
結(jié)論
Promise對(duì)象廣泛用于Javascript異步編程。而且開(kāi)發(fā)者對(duì)于如何正確使用它,有時(shí)還有些困惑。在這篇博客文章里,我已經(jīng)試圖描述一個(gè)用戶例子,即當(dāng)開(kāi)發(fā)者需要在之后的代碼中使用來(lái)自Promise對(duì)象的返回值的實(shí)例。
英文原文鏈接:https://dev.to/ramonak/javascript-how-to-access-the-return-value-of-a-promise-object-1bck
更多中文參考資料
[1] JavaScript Promise - Javascript教程. https://www.runoob.com/js/js-promise.html
[2] JavaScript Promise 對(duì)象 – 編程技術(shù). https://www.runoob.com/w3cnote/javascript-promise-object.html
[3] 7.6 Promise – 7. 瀏覽器 – JAVASCRIPT教程- 廖雪峰的官方網(wǎng)站. https://liaoxuefeng.com/books/javascript/browser/promise/index.html
到此這篇關(guān)于Javascript如何訪問(wèn)Promise對(duì)象返回值的文章就介紹到這了,更多相關(guān)js訪問(wèn)Promise對(duì)象返回值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JavaScript Promise.all 靜態(tài)方法常見(jiàn)問(wèn)題記錄
- JavaScript中promise.all和promise.race的區(qū)別詳解
- 前端JavaScript經(jīng)典之Promise詳解
- 在Node.js中處理Promise中錯(cuò)誤的示例代碼
- 深入理解JavaScript Promise鏈?zhǔn)秸{(diào)用與錯(cuò)誤處理機(jī)制
- JavaScript中promise的使用解釋
- js中async/await與Promise的區(qū)別
- JavaScript錯(cuò)誤處理之分析 Uncaught(in promise) error的原因及解決方案
相關(guān)文章
一道超經(jīng)典js面試題Foo.getName()的故事
Foo.getName算是一道比較老的面試題了,大致百度了一下在17年就有相關(guān)文章在介紹它,下面這篇文章主要給大家介紹了關(guān)于一道超經(jīng)典js面試題Foo.getName()的相關(guān)資料,需要的朋友可以參考下2022-03-03avalon js實(shí)現(xiàn)仿微博拖動(dòng)圖片排序
玩微博的朋友都上傳過(guò)圖像吧,當(dāng)圖片上傳后用戶是可以隨意拖動(dòng)圖片的,調(diào)整圖片的順序,那么此功能是怎么實(shí)現(xiàn)的,下面小編通過(guò)此篇文章給大家詳解基于avalon js實(shí)現(xiàn)仿微博拖動(dòng)圖片排序,需要的朋友可以參考下2015-08-08bootstrap制作jsp頁(yè)面(根據(jù)值讓table顯示選中)
這篇文章主要為大家詳細(xì)介紹了bootstrap做的jsp頁(yè)面,根據(jù)值讓table顯示選中,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01基于Html+CSS+JS實(shí)現(xiàn)手動(dòng)放煙花效果
這篇文章主要介紹了利用Html+CSS+JavaScript實(shí)現(xiàn)的放煙花效果,文中一共實(shí)現(xiàn)了兩種方式:手動(dòng)和自動(dòng),文中的示例代碼講解詳細(xì),感興趣的可以試一試2022-01-01基于javascript canvas實(shí)現(xiàn)五子棋游戲
這篇文章主要介紹了基于javascript canvas實(shí)現(xiàn)的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07JavaScript?新提案optional?chaining可選鏈屬性原理詳解
這篇文章主要為大家介紹了JavaScript?新提案optional?chaining可選鏈屬性原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05JavaScript ES6 Class類實(shí)現(xiàn)原理詳解
這篇文章主要介紹了JavaScript ES6 Class類實(shí)現(xiàn)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05