Создать представление класса / объекта, только если то, что вы пытаетесь представить, может быть лучше объяснено как объект.
Хэш-карты - еще одно решение. Например, вместо разнородных массивов для возрастов и имен, если имена уникальны, вы можете использовать имя как ключи и возраст в качестве значения.
JavaScript имеет концепцию «выполнить до завершения» . Если не возникает ошибка, функция выполняется до тех пор, пока не будет достигнут оператор return
или его конец. Другой код вне функции не может помешать этому (кроме случаев, когда возникает ошибка).
Если вы хотите resolve()
выйти из функции инициализации, вы должны добавить ее в return
:
return new Promise(function(resolve, reject) {
return resolve();
console.log("Not doing more stuff after a return statement");
});
Обратные вызовы, которые будут вызваны, когда вы resolve
обещание по-прежнему требуется, чтобы спецификация была вызвана асинхронно. Это необходимо для обеспечения согласованного поведения при использовании обещаний для сочетания синхронных и асинхронных действий.
Поэтому, когда вы вызываете resolve
, обратный вызов поставлен в очередь , а выполнение функции немедленно продолжается любой код, следующий за вызовом resolve()
.
Только после того, как цикл событий JS будет предоставлен обратно, можно удалить обратный вызов из очереди и фактически вызвать.
EnqueueJob
, который вызывается .then
.
– Felix Kling
6 March 2015 в 11:18
resolve()
сама является асинхронной. Как мы видели в другом (удаленном) ответе, некоторые люди считают, что вызовresolve
немедленно запустит любые обратные вызовы. – Alnitak 6 March 2015 в 11:56resolve
сам по себе не является асинхронным, он полностью синхронный. Хотя использование строго ES6 API не наблюдается, является ли он синхронным или асинхронным. – Esailija 6 March 2015 в 12:25resolve
приведет к тому, что любые зарегистрированные обратные вызовы будут немедленно вызваны так, чтобы они были частью текущего стека вызовов. Это неверно, вместо этого он просто ставит в очередь обратные вызовы (и вы правы, это не async, но он просто делает свое дело и немедленно прекращается) – Alnitak 6 March 2015 в 13:07console.log
появляется вместо этого, почему он появляется в этом порядке. До сих пор, чтоresolve
делает и как обещания не имеют отношения к тому, как я интерпретирую этот вопрос. Но, конечно, все еще важно знать в контексте обещаний. Одна из причин, по которой я поддержал ваш ответ :) – Felix Kling 6 March 2015 в 17:28