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 に答える