簡體   English   中英

Json object model 未更新

[英]Json object model is not updated

我想更新 json object model 值,如下面的代碼。 但是當我更改值時,它似乎並沒有更新 model。

我試過刪除異步代碼,這似乎有效。 為什么異步代碼不起作用? 有人可以解釋一下嗎。 謝謝

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' } }

modifyJson應該返回一個 promise 以便await編輯。

由於標記為async的函數會隱式返回 Promise,因此您可以使用Array.map而不是forEachasync function 來生成一組 Promise。

然后只需使用Promise.all等待它們全部完成。

請注意,此處的modifyJsonasyncTransalateText本身不需要標記為async 通常不應將 function 標記為async並返回 promise。

 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); })();

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

最初的問題是,當我們記錄 output 時,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); })();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM