Js Promise


ArbNet
89

Вряд-ли ответите, но может кто что-то подобное делал.

  • Есть класс, в конструктор класса передаю список подключаемых файлов. 
  • В цикле перебираю массивсписок аргументов(подключаемых файлов) и запускаю загрузку функцией Load
  • Функция Load возвращает промис, то есть в теле промиса в then когда файл загрузится я могу использовать возможности этого файла
Проблема в том что файлов несколько и неизвестно когда все загрузятся. В результате конструктора думаю нужно вернуть промис в котором отслеживать загрузку всех файлов и по готовности делать resolve(true). То есть надо как-то объединить все промисы загрузки.

export class Highlight {
  constructor(...arg){
  /* Конструктор */
    if(!Array.isArray(arg))arg=arg.split(',');
    let Prm=new Promise(function(resolve){
      while(arg.length)resolve(true)
    });
    for(let val of arg)
      Prm.then(()=>Load('../editor/'+val+'.js')
      		    .then(()=>arg.delete(val))
      )
    return Prm
  }
}


ArbNet

Ребята, а ларчик просто открывался 😀 Нашёл решение.

constructor(...arg){
  /* Конструктор */
    if(!Array.isArray(arg))arg=arg.split(',');
    let Prm=[];
    for(let val of arg)
      Prm.push(Load('../editor/'+val+'.js'))
    return Promise.all(Prm).then(()=>{return this});
  }


Sly32

Что, в пхп наигрался, теперь Реакт изобретаешь? Или его тож у тебя украли?


ArbNet

Во-первых это нативный Js, а не React. Во-вторых я делаю свой фреймворк без сторонних библиотек только PHP(+ БД) и JS.

В данном случае просто сделал class Highlight для подсветки синтаксиса.

Сразу отвечу на твой вопрос, зачем делать свою либу когда есть уже куча разных, просто прикрути и всё..

У меня код намного меньше, быстрее и его можно использовать не только для подсветки блока кода, но и в визуальном редакторе, к тому же совместим с самим движком(то есть пользователи смогут простым указанием в структуре подключать его для подсветки кода или в редакторе) 😀

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *