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

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

Json 對象模型未更新

Json 對象模型未更新

慕田峪7331174 2021-10-29 16:42:24
我想像下面的代碼一樣更新 json 對象模型值。但是當我更改值時它似乎沒有更新模型。我嘗試刪除異步代碼,這似乎有效。為什么異步代碼不起作用?有人可以解釋我。謝謝var json = {  lang: "es",  country : "Spain",   city : {    cityname : "name"  }  };async function asynctranslateText() {  return new Promise((resolve, reject) => {    resolve("OK");  });}async function modifyJson(en) {  Object.keys(en).forEach(async function (item) {    if (typeof en[item] === 'object') {      await modifyJson(en[item]);    } else {      en[item] = await asynctranslateText();    }      });} (async () => {  await modifyJson(json);  console.log(json); })();Output{ lang: 'es', country: 'Spain', city: { cityname: 'name' } }Expected output:{ lang: 'OK', country: 'OK', city: { cityname: 'OK' } }
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

如果使用 for .. of 循環枚舉對象鍵,結果將如預期。


最初的問題是當我們記錄輸出時,不會執行 modifyJson。


var json = {

  lang: "es",

  country : "Spain", 

  city : {

    cityname : "name"

  }  

};


async function asynctranslateText() {

  return new Promise((resolve, reject) => {

    resolve("OK");

  });

}


async function modifyJson(en) {

 for(let item of Object.keys(en)) {

    if (typeof en[item] === 'object') {

      await modifyJson(en[item]);

    } else {

      en[item] = await asynctranslateText();

    }

  }

}


 (async () => {

  await modifyJson(json);

  console.log(json);

 })();


查看完整回答
反對 回復 2021-10-29
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

modifyJson應該返回一個承諾才能被await編輯。


由于async隱式標記的函數會返回承諾,因此您可以使用與函數Array.map相反的方式來生成承諾數組。forEachasync


然后只需使用Promise.all等待所有這些完成。


請注意,此處的modifyJson和asyncTransalateText本身不需要標記為async。通常,函數不應標記為asyncAND 返回承諾。


var json = {

  lang: "es",

  country: "Spain",

  city: {

    cityname: "name"

  }

};


function asynctranslateText() {

  return new Promise((resolve, reject) => {

    resolve("OK");

  });

}


function modifyJson(en) {

  return Promise.all(Object.keys(en).map(async function(item) {

    if (typeof en[item] === 'object') {

      await modifyJson(en[item]);

    } else {

      en[item] = await asynctranslateText();

    }

  }));

}


(async() => {

  await modifyJson(json);

  console.log(json);

})();


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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