Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Асинхронные задачи, callback (https://javascript.ru/forum/events/75581-asinkhronnye-zadachi-callback.html)

alecto 21.10.2018 22:06

Асинхронные задачи, callback
 
Добрый день друзья, помогите пожалуйста разобраться... вроде элементарные вещи разбираю, но почему-то вывод происходит не в том порядке.

function processBuild (srcUrl, baseUrl, destUrl, newest, callback) {
  return src(srcUrl)
    .pipe(gulpif(newest, changed(path.tmp.temp + baseUrl)))
    .pipe(dest(destUrl + baseUrl)
      .on('end', () => { if(true) {console.log(srcUrl); callback;} }));
}

var done = (url) => {
            console.log('done');
            return 'OK';
          }

function setBuild (destUrl, newest) {
  processBuild(path.css.files,    path.css.folder,    destUrl, newest, 
    processBuild(path.css.mapFiles, path.css.mapFolder, destUrl, newest, 
      processBuild(path.html.files,   path.html.folder,   destUrl, newest, 
        processBuild(path.js.files,     path.js.folder,     destUrl, newest, 
          done()))));
  return src('./');
}

function tempBuild () { return setBuild(path.tmp.temp, false); }

task('test', tempBuild);


в setBuild я вызываю функции по очереди через callback и ожидаю увидеть в консоли следующий порядок:
./alecto/my/styles/all/theme/**/*.css
./alecto/my/styles/all/theme/**/*.map
./alecto/my/styles/all/template/**/*.html
./alecto/my/styles/all/template/**/*.js

но вывод происходит непонятно в каком порядке:
./alecto/my/styles/all/theme/**/*.map
./alecto/my/styles/all/template/**/*.js
./alecto/my/styles/all/theme/**/*.css
./alecto/my/styles/all/template/**/*.html

помогите пожалуйста разобраться, где ошибка.
пробовал через async/away - та же ерунда получается.

Белый шум 22.10.2018 11:05

Попробуйте как-то так:
function setBuild (destUrl, newest) {
  processBuild(...)
    .pipe(processBuild(...))
    .pipe(processBuild(...))
    .pipe(processBuild(...))
    .pipe(processBuild(...))

  return src('./');
}

function processBuild (...) {
  var $d = $.Deferred();
  src(srcUrl)
    .pipe(gulpif(newest, changed(path.tmp.temp + baseUrl)))
    .pipe(dest(destUrl + baseUrl)
    .pipe( function(){ console.log(srcUrl); $d.resolve(); } )

  return $d;
}


Часовой пояс GMT +3, время: 21:31.