jquery $(数据).each不适用于promises?

时间:2016-11-07 14:12:57

标签: javascript jquery ajax

我的AJAX处理程序中有一个each()循环来进入我的temp数组,但最后我仍然得到一个空数组。这很奇怪,我记得我曾经在each()使用诺言,所以没有问题。

var temp = [];
$.ajax({
    type: 'GET',
    url: '/endpoint',
    success: function(data) {
        $(data).each(function() {
            //do some stuff
            console.log(something); // working
            temp.push(something);
    }).promise().done(function() {
        console.log(temp); // still empty array?!
    });
});

更新:以下是人们如何做到https://stackoverflow.com/a/8941358/7095330

2 个答案:

答案 0 :(得分:2)

将脚本缩减为您的问题,一切似乎都正常。希望这有助于您发现问题出现在代码中的其他位置:



var temp = [];
var data = [1,2,3,4,5,6,7,8];

$(data)
    .each(function(thing) {
      //do some stuff
      console.log(thing); // working
      temp.push(thing);
    })
    .promise()
    .done(function() {
      console.log(temp); // still empty array?!
    });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

然而promise().done()非常奇怪;我无法理解你为什么需要它。

听起来像map的情况,你有一个输入数组,你想要转换它的内容。

&#13;
&#13;
var data = [1,2,3,4,5,6,7,8]

var changedData = data.map(function (datum) {
  // do stuff
  return 'did stuff to ' + datum;
});

console.log(changedData)
&#13;
&#13;
&#13;

除非您尝试做的是以下内容,否则仍然有效。也许是PEBKAC错误?

&#13;
&#13;
var temp = [];
$.ajax({
    type: 'GET',
    url: 'https://google.com/',
    // replaced success: with error:, for example's sake
    error: function(data) {
        $(data).each(function() {
            //do some stuff
            console.log('something');
            temp.push('something');
        }).promise().done(function () {
            console.log('each done', temp);
        });
    },
    done: function() {
        console.log('ajax done:', temp);
    }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

你忘了一个支架}

var temp = [];
$.ajax({
    type: 'GET',
    url: '',
    success: function(data) {
        $(data).each(function() {
            //do some stuff
            console.log('something'); // working
            temp.push('something');
    }).promise().done(function() {
        console.log(temp); // still empty array?!
    });
}});

请参阅https://jsfiddle.net/gw10un58/