第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在響應(yīng)數(shù)組中訪問 promiseValue?

如何在響應(yīng)數(shù)組中訪問 promiseValue?

猛跑小豬 2022-05-26 17:19:57
我目前在第一次使用 Promise.all() 時(shí)遇到問題(兩種獲取方法)。目前,當(dāng)我在控制臺記錄我的響應(yīng)時(shí),我可以在響應(yīng)中的 promiseValue 下看到我試圖獲取的數(shù)據(jù)。但我不確定如何訪問它?這是我的代碼:getData: function () {            Promise.all([                fetch('@Url.Action("GetSomething")',                    {                        method: 'POST',                        headers: {                            'Content-Type': 'application/json'                        },                        body: JSON.stringify(this.selectedValues)                    }),                fetch('@Url.Action("GetSomethingElse")',                    {                        method: 'POST',                        headers: {                            'Content-Type': 'application/json'                        },                        body: JSON.stringify(this.selectedValues)                    })            ]).then(responses => {                if (responses[0].ok && responses[1].ok) {                    return responses.map(response => {                        return response.json();                     });                } else {                    throw new Error(`Error ${response.status}`);                }            }).then(responseArray => {                console.log("LOG: ", responseArray);            }).catch(error => {                console.log(error);            });        },在線閱讀答案后,有一些建議可以添加另一個(gè) .then() ,這給了我相同的結(jié)果(兩個(gè)承諾)。我在 StackOverflow 上查看了有關(guān)此問題的相關(guān)問題,但只是變得更加困惑。我也嘗試過執(zhí)行以下操作,也給出了相同的結(jié)果:...}).then(responseArray => {    console.log("LOG: ", responseArray);    Promise.resolve([responseArray[0], responseArray[1]]).then((results) => {        console.log("Resolved results: ", results);    });}).catch(error => {    console.log(error);});我現(xiàn)在卡住了!這是 console.log 在響應(yīng)中顯示的內(nèi)容:LOG: (2) [Promise, Promise]   >0: Promise: {<Resolved>: (Array(20)}   >1: Promise: {<Resolved>: (Array(10)}非常感謝您的幫助,我希望我缺少一個(gè)小細(xì)節(jié)。我怎樣才能獲得這些承諾?謝謝!
查看完整描述

2 回答

?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊

你不是在等待res.json()返回的承諾。Promise.all()您可以在您的結(jié)果上添加另一個(gè),.map()或者您可以將它們烘焙到您使用的原始承諾中Promise.all()。后者是我的建議:


function fetchJSON(...args) {

    return fetch(...args).then(response => {

        if (!response.ok) {

            throw new Error(`Error ${response.status}`);

        }

        return response.json();

    });

}


getData: function() {

    Promise.all([

        fetchJSON('@Url.Action("GetSomething")', {

            method: 'POST',

            headers: {'Content-Type': 'application/json'},

            body: JSON.stringify(this.selectedValues)

        }),

        fetchJSON('@Url.Action("GetSomethingElse")', {

            method: 'POST',

            headers: {'Content-Type': 'application/json'},

            body: JSON.stringify(this.selectedValues)

        })

    ]).then(responseArray => {

        console.log("LOG: ", responseArray);

        // use responseArray here

    }).catch(error => {

        console.log(error);

    });

},

僅供參考,我經(jīng)常發(fā)現(xiàn)使用檢索響應(yīng)fetch()是不必要的冗長,因此最終使用某種輔助函數(shù),如fetchJSON()我在這里使用的,以防止重復(fù)代碼。

在我看來,fetch()界面應(yīng)該提供兩件事。

  1. 一個(gè)選項(xiàng),讓您告訴它如果不是 2xx 狀態(tài),您希望它拒絕。我理解在這種情況下并不總是拒絕的用例,但可能有更多用例您希望它拒絕,所以它應(yīng)該是一個(gè)選項(xiàng)。

  2. 告訴它讀取響應(yīng)并以文本、json 或其他類型返回的選項(xiàng),因此您不必再進(jìn)行另一個(gè)承諾返回函數(shù)調(diào)用來執(zhí)行此操作。

僅供參考,request-promisenodejs 的模塊,具有這兩個(gè)選項(xiàng)(因?yàn)樗鼈兘?jīng)常需要)。

但是,由于它沒有這些選項(xiàng)(盡管它們經(jīng)常需要),我們有時(shí)必須將其包裝以添加這些選項(xiàng)以避免重復(fù)代碼。在這種情況下,如果不是 2xx 狀態(tài),您希望它拒絕,并且您希望它讀取和解析 JSON,并且您希望在兩個(gè)地方執(zhí)行此操作,因此我們制作了一個(gè)小型實(shí)用程序函數(shù)來執(zhí)行此操作。


查看完整回答
反對 回復(fù) 2022-05-26
?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

在回調(diào)中返回一個(gè)Promise 會(huì)導(dǎo)致在鏈then中的 next 中解決 Promise 。then


然而,這里返回了一個(gè) promise 數(shù)組,promise 沒有在 next 中解決then:


return responses.map(response => {

    return response.json(); 

});

應(yīng)該有另一個(gè)Promise.all并行解決它們:


return Promise.all(responses.map(response => {

    return response.json(); 

}));

或者可以將其重寫為使用for循環(huán)的順序處理,因?yàn)樵诎l(fā)出請求后預(yù)計(jì)并行性不會(huì)有明顯的改進(jìn)。


無論如何,async..await使這更簡單:


async getData() {

    try {

        const responses = await Promise.all([

            fetch(...),

            fetch(...)

        ]);


        const responseArray = [];

        for (const response of responses) {              

            if (!response.ok)

                throw new Error(`Error ${response.status}`);


            responseArray.push(await response.json());

        }

        ...

    } catch (error){

        console.log(error);

    }

}


查看完整回答
反對 回復(fù) 2022-05-26
  • 2 回答
  • 0 關(guān)注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號