为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号