2016-03-28 3 views
0

Как использовать вложенный context.executeQueryAsync с отложенным? Ниже мой код, и я объясню, что именно я ищу:Вложенные context.executeQueryAsync с отложенным

кодекса

function getValues() { 
    var dfd = $.Deferred(function() { 

     context.executeQueryAsync(function() { 
      var navigationItem = []; 

      // First Loop 
      while (termEnumerator.moveNext()) { 

       // Push Parent Terms in navigationItem array 
       navigationItem.push({ "name": ""}); 

       // Get Sub Terms 
       context.executeQueryAsync(function() { 
        // Second Loop 
        while (termsEnum.moveNext()) { 
         // Push Sub Terms in navigationItem array 
         navigationItem.push({ "name": ""}); 
        } 
       }, function (sender, args) { 
        console.log(args.get_message()); 
       }); 
      } 

      dfd.resolve(navigationItem); 

     }, function (sender, args) { 
      console.log(args.get_message()); 
      dfd.reject(args.get_message()); 
     }); 
    }); 
    return dfd.promise(); 
} 

В основном я пытаюсь принести таксономию (Условия & это суб условия) в SharePoint Online с помощью описанных выше структур коды , Сначала я создал массив с именем navigationItem и повторил все условия.

Во время итерации, прежде всего, я нажимаю термины в этот массив, и вместе с этим я также получаю его суб-термины, если они есть, и вставляя их в один и тот же массив.

Я хочу, чтобы этот код не выполнялся до тех пор, пока второй цикл не завершит его выполнение. Так что у меня будет конечный массив, возвращая его в другую функцию.

ответ

1

Я хочу, чтобы этот код не выполнялся до тех пор, пока второй цикл не завершил его исполнение. Так что у меня будет конечный массив, возвращая его в еще одну функцию.

В этом случае вам необходимо иметь отсрочку для каждого executeQueryAsync.

Затем вам нужно создать общее отсрочку, чтобы закончить все методы async.

Вот пример кода для справки:

(function ($) { 
    function executeQueryAsync(succeededCallback, failedCallback) 
    { 
     var period = Math.random() * 10000; 

     setTimeout(function() { 
      succeededCallback(); 
     }, period); 

    } 

    function forEachAsync(items, funcAsync, callback) 
    { 
     var count = 0; 

     var total = $.Deferred(); 

     function increment() 
     { 
      count++; 

      if(count == items.length) 
      { 
       total.resolve(); 
      } 
     } 

     for (var i = 0; i < items.length; i++) 
     { 
      (function exec(item) { 
       var deferred = $.Deferred(function (defer) { 
        funcAsync(function() { 
         callback(); 
         defer.resolve(); 
        }); 
       }); 

       deferred.done(function() { 
        increment(); 
       }); 
      })(items[i]); 
     } 

     return total.promise(); 
    } 

    var promise = forEachAsync([1, 2, 3, 4, 5], executeQueryAsync, function() { 
     console.log('call back executing + ' + Date.now()); 
    }); 

    promise.done(function() { 
     console.log("promise done"); 
    }); 
})(jQuery); 

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^