You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:25:23