one_day
@one_day

Как наследовать метод от родителя по цепочке?

Доброго времени суток!
делаю задание из универа (ссылка на codepen) и не могу разобраться как написать функцию для 2го, 3го и 4го .job, для первого все отрабатывает а дальше ошибка:

Uncaught TypeError: runner.job is not a function


вот что я написал:
<script>
function Parallel(setings) {
this.parallelJobs = setings;
this.job = function (step){
            step();
};
};
</script>


пробовал еще вот так, но тоже ошибка на 2м .job
Uncaught TypeError: Cannot read property 'job' of undefined

<script>
function Parallel(setings) {
this.parallelJobs = setings;
};
Parallel.prototype = {
done: function () {
    alert('Вызван done');
},
job: function (step) {
    return step();
}
};
</script>

Код снизу нельзя править, это условие задания универа. Тыкните, плиз, в нужное направление
<script>
    /************************************************
     * Please don`t change the code bellow this line *
     ************************************************/
    var runner = new Parallel({
		//the number of simultaneously possible jobs, other jobs should be placed in queue.
        parallelJobs: 2
    });

    runner.job(step1)
        .job(step2)
        .job(step3)
        .job(step4)
        .done(onDone);

    function step1(done) {
        console.log('step1');
        for ( let i = 0; i <= 10e4; i++ ) ;
        console.log('end step1 cicle');
        setTimeout(done, 1000, 'hello world');
    }

    function step2(done) {
        console.log('step2');
        for ( let i = 0; i <= 10e2; i++ ) ;
        console.log('end step2 cicle');
        setTimeout(done, 1200, 'Job succeded');
    }

    function step3(done) {
        console.log('step3');
        for ( let i = 0; i <= 10e3; i++ ) ;
        console.log('end step3 cicle');
        setTimeout(done, 1500, 'step3');
    }

    function step4(done) {
        console.log('step4');
        for ( let i = 0; i <= 10e1; i++ ) ;
        console.log('end step4 cicle');
        setTimeout(done, 100, 'step4');
    }

    var isPassed = false;

    function onDone(results) {
        console.log('onDone', results);
        console.assert(Array.isArray(results), 'expect result to be array');
        console.assert(results[0] === 'hello world', 'Wrong answer 1');
        console.assert(results[1] === 'Job succeded', 'Wrong answer 2');
        console.assert(results[2] === 'step3', 'Wrong answer 3');
        console.assert(results[3] === 'step4', 'Wrong answer 4');
        console.log('Thanks, all works fine');
        isPassed = true;
    }

    setTimeout(function () {
        if ( isPassed ) return;
        console.error('Test is not done.');
    }, 10000);
</script>


на codepen
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
Ni55aN
@Ni55aN
runner.job(step1) возвращает то, что возвращает step1, то есть undefined
Нужно
job: function (step) {
    step();
    return this;
}


П.С. А в чем параллелизм ? Все же job'ы занимают главный поток
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы