1

我有一个传递给函数的值数组。该函数循环遍历数组并在另一种方法中使用这些值。

这适用于数组中的第一个值,然后是所有其他项目'我得到一个错误:“这个延迟已经解决了”。

我想得到一系列响应,它目前在 1 个响应后停止?

有什么帮助吗?谢谢!

function showQueryResults(searchResults){
    function getFacIds(arr){
        var def = new dojo.Deferred();
        for (var i = 0, iLen = arr.features.length; i < iLen; i++) {
            findParams.searchText = searchResults.features[i].attributes.ID;
            findTask.execute(findParams, function(response){
                def.callback(response);
            });
        };
        return def;
    };              
    getFacIds(searchResults).then(function(result){
        console.log(result);
    });
}
4

1 回答 1

0

ADeferred只能解决一次。您需要跟踪响应。

在 Dojo 1.7 语法中,假设没有错误:

require(["dojo/Deferred", "dojo/_base/array", "example/async"],
                                              function(Deferred, array, async) {
  var foo = function (arr) {
    var def, results, index;
    def = new Deferred();
    results = [];
    array.forEach(arr, function(item, index) {
      async(arr[index], function (r) {
        results.push(r);
        if(results.length === arr.length) {
          def.callback(results);
        }
      });
    }
    return def;
  };

  foo([1, 2, 3]).then(function (results) {
    //do something with the results
  });
}
于 2012-08-15T21:39:05.647 回答