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

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

ES6:解析包含其他 Promise 的 Promise,以便父級(jí)可以使用 .then

ES6:解析包含其他 Promise 的 Promise,以便父級(jí)可以使用 .then

慕妹3242003 2023-10-14 11:11:42
我有一個(gè)承諾,其中包含另一個(gè)包含解析器的 API 調(diào)用者承諾?,F(xiàn)在,當(dāng)我想使用 .then 作為父承諾時(shí),我無(wú)法做到這一點(diǎn),錯(cuò)誤說(shuō)Cannot read property 'then' of undefined,下面是我的示例代碼const getData = () => dispatch => new Promise((resolve) => {  return apiService    .getByParameter(abc)    .then((data) => {      dispatch(update({        name: data.name      }));      resolve();    })    .catch(() => {    });});現(xiàn)在每當(dāng)我嘗試做this.getData().then({<--something-->});它會(huì)拋出錯(cuò)誤Cannot read property 'then' of undefinedgetByParamter 方法來(lái)自一個(gè)類,如下getByParameter(...params) {    const endpoint = `${this.getEndpoint.call(this, ...params)}`;    const timeInitiated = performance.now();    return request(() => axios.get(endpoint, extraHeaders), timeInitiated,      endpoint, ACTIONS.ACTION_GET);  }const request = (rest, timeInitiated, endpoint, action) =>  new Promise((resolve, reject) => {    rest().then(({ data }) => {      const timeResolved = performance.now();      const timeCalculated = millisToMinutesAndSeconds(timeResolved - timeInitiated);      if (endpoint !== LOGS_ENDPOINT && timeCalculated > MAX_EXECUTION_TIME) {        apiLogger.warn(`The endpoint ${endpoint} took ${timeCalculated} seconds for ${action}`);      }      resolve(data);    })      .catch((response) => {        if (!isCancel(response)) {          reject(response);        } else {          apiLogger.debug('Request cancelled');        }      });  });請(qǐng)建議應(yīng)該采取什么解決方案來(lái)實(shí)現(xiàn)我的需要。
查看完整描述

2 回答

?
叮當(dāng)貓咪

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

你的箭頭函數(shù)立即執(zhí)行,并且無(wú)條件返回另一個(gè)函數(shù),而不是承諾!


const getData = () => (dispatch => new Promise(...))

getData()是一個(gè)函數(shù),所以.then它不存在。


自己嘗試一下


console.assert(typeof getData() !== "function", "`.then` doesn't exist on a function");

老實(shí)說(shuō),這段代碼應(yīng)該刪除調(diào)度回調(diào)并讓被.then調(diào)用者使用處理程序,這就是承諾的用途。


const getData = async () => {

    const data = await apiService.getByParameter(abc);


    return update(data);

});


查看完整回答
反對(duì) 回復(fù) 2023-10-14
?
紅顏莎娜

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

getData返回一個(gè)需要調(diào)度參數(shù)的函數(shù)。如果你調(diào)用該函數(shù),那么你就會(huì)得到一個(gè)承諾。

const dispatch = useDispatch();
const myPromise = this.getData()(dispatch);

請(qǐng)注意最后一行中的空括號(hào),后跟以調(diào)度作為參數(shù)的調(diào)用()(dispatch)

換句話說(shuō),getData創(chuàng)建一個(gè)可用于創(chuàng)建 Promise 的 thunk。

const thunkFunction = getData();const myPromise = thunkFunction(dispatch);
myPromise.then(...)


查看完整回答
反對(duì) 回復(fù) 2023-10-14
  • 2 回答
  • 0 關(guān)注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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