vue中异步请求数据问题,如何将异步改写成同步

朽木自雕xmzd 2020-01-21 09:06:20
代码如下:

结果如下:
为什么“2222”的结果中concat没有起作用,应该是长度为 21的数组
...全文
3853 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
a0356 2020-03-03
  • 打赏
  • 举报
回复
引用 8 楼 qq_16687863 的回复:
[quote=引用 6 楼 a0356 的回复:] 楼主是怎么解决的啊
实在不行,我可以给你看下代码[/quote] 大概理解了 谢谢楼主
朽木自雕xmzd 2020-02-29
  • 打赏
  • 举报
回复
引用 6 楼 a0356 的回复:
楼主是怎么解决的啊
实在不行,我可以给你看下代码
朽木自雕xmzd 2020-02-29
  • 打赏
  • 举报
回复
引用 6 楼 a0356 的回复:
楼主是怎么解决的啊
我这里面就是一个变量,我先吧它拼接进一个列表,再去遍历每个元素,进行别的操作。 不要这种方式,直接先去吧别的操作做好,再去拼接
朽木自雕xmzd 2020-01-23
  • 打赏
  • 举报
回复
引用 4 楼 天际的海浪 的回复:
确认了,是因为你的 this._normalizeSongs() 返回的不是Promise对象,而是先返回一个空数组[],之后再通过ajax的异步操作对这个空数组添加元素。 不是Promise对象就不能通过 await 等待ajax的异步操作。ajax的异步操作要在当前程序线程执行完之后才执行。 这样 res.concat(list) 与res合并的就是空数组 [] console.log("111",list)输出的也是[]。控制台看到111下面是个[]了么? 你能在控制台看到list有数据是因为在用console.log()输出数组或对象时,对象(数组)的属性是折叠不显示的。 如果你在console.log()输出之后改变了对象(数组)的属性,也就是ajax的异步操作对这个空数组添加元素,当你点击三角展开属性时,会重新读取对象(数组)当前的属性,也就是显示出来的是你点击三角展开时的属性,而不是执行console.log()时的属性。 如果用console.log(JSON.stringify(list));以字符串方式输出就会看到list当前的值。
感谢,已解决,非常感谢
朽木自雕xmzd 2020-01-22
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:
res.concat() 不是异步函数,不需要用 await 调用啊。
关键是用不用,它都无法拼接进去,不知道为什么,不用,结果也是这样
天际的海浪 2020-01-22
  • 打赏
  • 举报
回复
确认了,是因为你的 this._normalizeSongs() 返回的不是Promise对象,而是先返回一个空数组[],之后再通过ajax的异步操作对这个空数组添加元素。 不是Promise对象就不能通过 await 等待ajax的异步操作。ajax的异步操作要在当前程序线程执行完之后才执行。 这样 res.concat(list) 与res合并的就是空数组 [] console.log("111",list)输出的也是[]。控制台看到111下面是个[]了么? 你能在控制台看到list有数据是因为在用console.log()输出数组或对象时,对象(数组)的属性是折叠不显示的。 如果你在console.log()输出之后改变了对象(数组)的属性,也就是ajax的异步操作对这个空数组添加元素,当你点击三角展开属性时,会重新读取对象(数组)当前的属性,也就是显示出来的是你点击三角展开时的属性,而不是执行console.log()时的属性。 如果用console.log(JSON.stringify(list));以字符串方式输出就会看到list当前的值。
天际的海浪 2020-01-22
  • 打赏
  • 举报
回复
可能list不是真正的数组,或者里面的值是自定义的属性,不是真正的数组元素。
天际的海浪 2020-01-21
  • 打赏
  • 举报
回复
res.concat() 不是异步函数,不需要用 await 调用啊。

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧