Console.log 打印后基于用户输入的更改

Posted

技术标签:

【中文标题】Console.log 打印后基于用户输入的更改【英文标题】:Console.log Changes based on user input after being printed 【发布时间】:2021-12-28 11:03:48 【问题描述】:

我在打开带有两个 console.log 的页面进行调试时调用了这个传奇。这给了我两个应该相似的日志。 data[0] 中的值用于 AgGrid 表。表中有两个字段是可编辑的,这些字段在网络调用中为空。但是,如果我在浏览器中编辑字段,则在展开 console.log 之前,该值现在显示为我在字段中输入的任何内容。这将发生在任一日志上,因此它可以先将该字段记录为 null,然后再记录一个值。

function* saga( Id ) 
    try 
        const response = yield call(get, GET_DATA(Id));
        console.log(response.data[0]);
        console.log(response.data[0]);
        yield put(fetchDataSuccess(response.data));
     catch (error) 
        yield put(displayErrorMessage(NOB.ERROR));
    
 

如果引用发生了变化,console.log 是否应该能够在打印后发生变化?这会在一定程度上降低调试的效率。

【问题讨论】:

【参考方案1】:

console.log() 实际上是异步的,如果您输出的值是一个在您调用console.log() 后不久发生变化的对象,那么实际输出的很可能是更新后的版本。

所以,简短回答你的问题,是的。

如果你需要在变化的时候输出,有两种比较简单的方法可以在那个阶段输出。

第一个是简单地输出一个克隆。你可以像这样创建一个浅克隆:

const objectToOutput;
console.log( ...objectToOutput );

如果您需要深度克隆,可以拉入库或编写自己的方法。

第二个选项是先将其转换为 JSON。如果需要,您甚至可以将该 JSON 转换回对象并输出。适用于包含简单数据的复杂对象(就像您从 API 调用中获取的数据):

const objectToOutput;
console.log(JSON.stringify(objectToOutput, null, 2));
// or
console.log(JSON.parse(JSON.stringify(objectToOutput)));

【讨论】:

以上是关于Console.log 打印后基于用户输入的更改的主要内容,如果未能解决你的问题,请参考以下文章

js中控制台输出方式

promise的链式调用问题 走完用户名已存在后然后还能走一次下面的than打印aaa

实用vscode插件:自动帮你写console.log —— Turbo Console Log

0088 JavaScript输入输出语句:alertconsole.logprompt

什么是异步

字符替换函数