亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我在對象字面量中使用 await 時程序如何運行?

當我在對象字面量中使用 await 時程序如何運行?

肥皂起泡泡 2023-03-10 16:45:02
當我寫一個返回對象的函數,但是對象的每一個值都是通過 resolving promises 構造的,最后我會得到什么?我的意思是,對象值的類型是什么?async foo() {    return {        p1: await fetch('http://dummy.restapiexample.com/api/v1/employees') // FETCH REQUEST,        p2: await fetch('http://dummy.restapiexample.com/api/v1/employees') // FETCH REQUEST    }}對于這樣的流程,將在 ?p2之后解決p1?此代碼是否與以下示例一樣工作:async foo() {    const p1 = await fetch('http://dummy.restapiexample.com/api/v1/employees') // FETCH REQUEST    const p2 = await fetch('http://dummy.restapiexample.com/api/v1/employees') // FETCH REQUEST    return {        p1,        p2    }}謝謝你!
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

要求您澄清您的問題(?。N視M力解釋您實際要問的內容。我很想簡單地刪除這個答案。它可能有用也可能沒有用!


如果你偽造“FETCH REQUEST”是什么,使用一種async在它啟動時簡單地打印到控制臺的方法,就在它(異步)解析之前,你可以很清楚地看到它會在p1開始之前完成p2。運行它幾次可以確認這是對p1和p2不交錯的調用。


async function foo() {

    return {

        p1: await randomAsyncMethod("p1"),

        p2: await randomAsyncMethod("p2")

    }

}


async function randomAsyncMethod(which){

   console.log("starting",which);

   return new Promise( resolve =>  

      setTimeout( () => {

          console.log("resolving",which);

          resolve();

      }, Math.random() * 1000)

   );

}



foo();


現在將其更改為第二個示例,您可以看到行為基本相同。


async function foo() {

    var p1 = await randomAsyncMethod("p1");

    var p2 = await randomAsyncMethod("p2");

    return {

        p1,

        p2 

    }

}


async function randomAsyncMethod(which){

   console.log("starting",which);

   return new Promise( resolve =>  

      setTimeout( () => {

          console.log("resolving",which);

          resolve();

      }, Math.random() * 1000)

   );

}



foo();


至于你的對象會包含什么fetch方法的返回值是:

解析為Response對象的 Promise 。


查看完整回答
反對 回復 2023-03-10
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Promise 是創建 Promise 時不一定知道的值的代理。它允許您將處理程序與異步操作的最終成功值或失敗原因相關聯。這讓異步方法像同步方法一樣返回值:異步方法不是立即返回最終值,而是返回一個在未來某個時間點提供值的承諾。

p1 和 p2 在兩個示例中都返回一個承諾。


查看完整回答
反對 回復 2023-03-10
  • 2 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號