2012-08-15 56 views
1

我有一個值傳遞給函數的數組。該函數遍歷數組並在另一個方法中使用這些值。dojo.deferred和for循環

也能正常工作數組中的第一個值,那麼所有其他項目」我得到一個錯誤:‘這種延期已經得到解決’。

我想結束一個響應數組,它現在停止後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); 
    }); 
} 

回答

0

A Deferred只能解決一次。你需要跟蹤迴應。

在道場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 
    }); 
} 
+0

由於某種原因在陣列中的第一項之後的for循環將停止,所以我用dojo.forEach(ARR,函數(條目,i)的{ ......不過,我=== arr.length不起作用,因爲我不是爲了0,2,3 - > def.callback被激發,但有1項以上 – dan 2012-08-16 16:18:59

+0

@丹 - ?啊,是的,這個代碼中有大約3個錯誤,編輯過的代碼也沒有經過測試,但希望它更好,新的代碼按照數組長度進行檢查,但不按順序返回結果,如果你關心結果順序,可以使用'results [ index] = r;'而不是'push'。 – McDowell 2012-08-16 17:14:18