主頁 > 軟體設計 > 為什么async/await然后產生不同的結果

為什么async/await然后產生不同的結果

2021-12-29 19:40:09 軟體設計

我只是問這個問題來澄清并更好地理解 javascript 承諾。下面的兩個代碼看起來和我很相似,但是為什么兩者都給出了不同的結果。還有如何以.then方式獲取async/await函式的結果謝謝。

異步/等待

const getFieldValue = async (collection, userid) => {
  let response;

  const querySnapshot = await firestore()
    .collection(collection)
    .where("userid", "==", userid)
    .get();
  querySnapshot.forEach((doc) => {
    const { name } = doc.data();
    response = name;
  });

  return response;
};
async function fetchData() {
  const name = await getFieldValue("Users", userid);
  console.log("name", name);
}
fetchData();

。然后

const getFieldValue = (collection, userid) => {
  let response;

  firestore()
    .collection(collection)
    .where("userid", "==", userid)
    .get()
    .then((querySnapshot) => {
      querySnapshot.docs.find((doc) => {
        const { name } = doc.data();
        response = name;
      });
    })
    .catch((e) => console.log(e));

  return response;
};
const name = getFieldValue("Users", userid);
console.log("name", name);

異步/的await回傳正確的名稱和。然后回傳undefined

uj5u.com熱心網友回復:

是的,這正是人們所期望的。

請記住,await有效地暫停執行直到等待的操作完成。

在您使用的示例中,.then您立即回傳,因為您沒有撰寫承諾鏈,response僅在等待操作的序列完成時才回傳。相反,您立即回傳初始化undefinedresponse

因此,表達你的邏輯的正確方法,否則不變,通過.then將是

 const getFieldValue = (collection, userid) => {
    let response;

    return firestore() // notice the return here! This is vital
      .collection(collection)
      .where("userid", "==", userid)
      .get()
      .then((querySnapshot) => {           
        querySnapshot.docs.find((doc) => {
          const { name } = doc.data();
          response = name;
        });
      })
      .then(() => response) // notice how we resolve our promise chain with the value ultimately assigned
      .catch((e) => console.log(e));
};

uj5u.com熱心網友回復:

因為使用async/await函式的執行被掛起(“暫停”),直到承諾被解決因此你的函式等待結果。

但是,使用.then,您的函式將立即繼續執行 .then “塊”下方的代碼,而不是等待 resolve 的承諾由于該回應在 .then 部分中設定之前回傳,因此仍未定義。

對于 async/await,您必須想象 return 陳述句也在 .then 塊中。

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/396758.html

標籤:javascript 异步 谷歌云firestore 异步等待 承诺

上一篇:型別void上不存在屬性

下一篇:返回列表

標籤雲
其他(133517) Python(23284) JavaScript(14519) Java(14494) C(10891) 區塊鏈(8059) AI(6732) 基礎類(6313) 腳本語言(PerlPython)(5129) MySQL(5123) 非技術區(4971) Android(4183) Linux(4020) PHP(3675) C#(3500) 爪哇(3361) C語言(3288) html(3144) C++語言(3117) sql(2841) Java相關(2746) 疑難問題(2699) R(2643) 数组(2609) 熊猫(2570) 單片機工控(2479) 反应(2266) Web開發(1951) css(1910) VBA(1872) 数据框(1829) 节点.js(1813) 網絡通信(1793) 數據庫相關(1767) VB基礎類(1755) 蟒蛇-3.x(1660) 開發(1646) ASP.NET(1645) .NETCore(1637) 系統維護與使用區(1617) 基礎和管理(1579) JavaEE(1566) C++(1563) 專題技術討論區(1515) 列表(1501) HtmlCss(1495) json(1490) Windows客戶端使用(1484) 安卓(1414) iOS(1371) Unity3D(1365) VCL組件開發及應用(1353) 扑(1330) .NET技术(1314) 查询(1313) 打字稿(1299) Qt(1274) HTML(CSS)(1220) sql-server(1210) 其他技術討論專區(1200)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 為什么async/await然后產生不同的結果

    我只是問這個問題來澄清并更好地理解 javascript 承諾。下面的兩個代碼看起來和我很相似,但是為什么兩者都給出了不同的結果。還有如何以.then方式獲取async/await函式的結果...

    uj5u.com 2021-12-29 19:40:09 more
  • 型別void上不存在屬性

    我正在撰寫一個鉤子來發出一個回傳兩個屬性sessionId和sessionData的 post 請求。我在一個組件中使用這個鉤子。我的鉤子看起來像這樣。export const createOrder = async (...

    uj5u.com 2021-12-29 19:39:23 more
  • Android將MutableLiveData<MutableSet>>轉換為LiveData<Set>>

    我正在使用可變陰影,我有一個類似的東西val selectedEntryIds: LiveData<Set<Long>> get() = _selectedProductIdsprivate val _selectedProductIds = MutableLiveData<Mu...

    uj5u.com 2021-12-29 17:36:37 more
  • Android檔案代碼示例中可能存在錯誤,還是我遺漏了什么?

    我在 Android Studio 中作業時一直在研究如何創建多選復選框對話框,自然而然地通過查看 android 開發人員頁面開始并遇到了本指南。他們展示的代碼示例是這樣的:@Overridepubl...

    uj5u.com 2021-12-29 17:34:52 more
  • BottomSheetDialogsetCanceledOnTouchOutsideKotlin

    我創建了一個底部表單對話框并正在實作取消功能。當觸摸對話框外部時,它必須不被關閉,但底部導航應該抓住觸摸。經過長時間的試用,我意識到我不能在 Kotlin 上使用“setCancele...

    uj5u.com 2021-12-29 17:34:06 more
  • Flutter-卡片高程無陰影

    我想設計一張這樣的卡片。但是當我使用高程屬性時,它通常會給出帶有陰影的卡片視圖。如何從卡片中去除陰影并制作像此影像一樣的視圖。
    uj5u.com熱心網友回復:你可以用shadowC...

    uj5u.com 2021-12-29 17:33:21 more
  • 更改顏色tabindicatorcolorxamarin形式

    我想更改MainPage.xaml 中的 tabindicatorcolor, 但我看不到屬性 tabindicatorcolor。他們在這里提到使用AppCompat,我已經從 NuGet 匯入了 Android 支持庫 v7 AppCompat 并...

    uj5u.com 2021-12-29 17:32:30 more
  • Android意圖,重復相同的活動

    嗨,我第一次在 Kotlin 中撰寫 android 代碼,當我嘗試使用 Intent 而不是轉到下一頁時,相同的活動正在重復。我在這里提供我的活動代碼class MainActivity : Activity() { ov...

    uj5u.com 2021-12-29 17:31:43 more
  • AndroidStudio:嘗試在空物件參考上呼叫虛擬方法“Post.getPostima

    private void getPostImage(final ImageView imageView, String postid){ DatabaseReference reference = FirebaseDatabase.getInstance().getReference("posts")....

    uj5u.com 2021-12-29 17:31:03 more
  • 單個textviewandroid中的兩種不同樣式

    我正在嘗試合并具有兩種不同樣式的兩個文本視圖。在上面的圖片中,如何將彎曲的邊框文本視圖放在上面文本的末尾。意思是 (6) 的結尾。有一種方法可以在 html 中執行此操作,但...

    uj5u.com 2021-12-29 17:29:34 more