Какова лучшая практика, чтобы получить элементы, которые имеют те же элементы из другого массива - PullRequest
0 голосов
/ 24 августа 2011

Хорошо, я знаю, что заголовок довольно сложный, но вопрос также трудно поставить в одну строку ... извините.

Цель: я хочу запустить обратный вызов, когда все модули доступны. Проблема: чтосамый быстрый способ?Пример:

проблема начинается с функции "runCallbacks", которая получает все новые добавленные объекты, например:

runCallbacks(newItems/*as array ['a','b','c'];*/){
    // now I would need to understand the dependencies of the callbacks
    // each callback might depend on one or more objects
    // iNeed(['a','b'], toRunThis);
    //           |          |-callback to run when those are ready
    //           |-are the dependencies

, о чем я думал:

 callbacks = [[[callbackFunction],['loadedItems'],['notLoadedItems']]]
              |-----------it's a single callback--------------------|

имеет хорошие показатели или у вас есть идея получше?спасибо

Другой пример

this.use(['a', 'b'], function(){/* do something with 'a' and 'b' only when are ready */})
use: function(paths, callback, target/*not used in this case*/){
    // "a", "b", 'c' module is available
    // "d", 'e' module is not available
    this.callbacks.push([[target], ['a', 'b', 'c'], ['d', 'e']]);
    //                               |      |-not loaded
    //                               |-loaded
}

// then an object might be added
this.add({...})

// then will check if this new object may make some callbacks to run
function(newPaths/* ['d'] */){
    // loop all callbacks items
    // remove items from [not loaded array] and put to [loaded array] if
    // exists in newPaths
    // in this case the callback already has: a,b,c; but misses: d,e;
    // now it will add "d" to the loaded array
    // and now only miss the "e" path

, поэтому, если обратному вызову нужны «a» и «b», но не существует, сохраняется обратный вызов, когда оба готовы, я добавляю «a» и «b»."модуль, а затем я хочу знать, что обратные вызовы ведьмы готовы к запуску;

обратный вызов может иметь несколько зависимостей, модуль" a "может использоваться несколькими обратными вызовами, поэтому он немного сложен

1 Ответ

1 голос
/ 24 августа 2011

Если вы используете jquery, посмотрите на $ .when, в противном случае есть библиотеки, такие как promises.js (объяснение здесь: http://blogs.msdn.com/b/rbuckton/archive/2010/01/29/promises-and-futures-in-javascript.aspx). Идея состоит в том, что обещание запускает событие, когда зависимости готовы и разрешены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...