如何在JavaScript Promise中编写多行代码?
问题分析与修正
你的核心问题在于箭头函数的语法错误:在done回调里,你写了(data) => function(){...},这会让箭头函数返回一个未被执行的函数,而非直接执行代码块里的逻辑,导致循环、清空数组等操作根本不会运行。
修正后的代码
var callCount = 0; var chartdata = []; function ajaxCallFun() { return $.ajax({ cache: false, type: 'POST', url: '/echo/json/', data: { json: JSON.stringify({callCount: ++callCount}) } }).done(function(data) { console.log(data, data.length) chartdata.push(data.callCount); }) } setInterval(function(){ ajaxCallFun().done((data) => { // 声明i为局部变量,避免污染全局作用域 for (let i = 0; i < chartdata.length; i += 1){ console.log(i); } // 这里可以写任意多行代码 console.log("执行其他操作"); // 清空数组 chartdata = []; }); }, 1000);
关键修改点
- 将
(data) => function(){改为(data) => {:箭头函数使用花括号{}包裹代码块时,会直接执行内部语句,而非返回一个函数。 - 给循环变量
i加上let声明:避免i成为全局变量,引发意外的作用域问题。
额外说明
jQuery的$.ajax返回的是Deferred对象,它的done方法接受的是一个回调函数,当请求成功时会直接执行这个回调。你可以在回调的代码块里编写任意多行逻辑,只要保证语法正确即可。
内容的提问来源于stack exchange,提问作者MJ777
相关产品推荐
相关产品推荐

