ECMAScript Script Jobs. Как инициировать работу этого типа?

148
16 января 2018, 14:26

ECMAScript определяет 2 типа работ как обязательные: Promise Jobs и Script Jobs. Ситуация с Promise Jobs понятна: создал себе Promise или асинхронную функцию - и все, новая Promise Job создана и добавлена в очередь.

Но как обстоит дело со Script Jobs? Что нужно сделать, чтобы создать работу этого типа?

Знаю, что к Script Jobs относятся также код модулей. Но разве при импортировании модуля его код не выполняется сразу же? Хотя спецификация говорит, что работы для того и нужны, чтобы "откладываться" и выполняться позже (как в ситуации с Promise'ами).

Короче говоря, что нужно сделать, чтобы инициировать новую работу и добавить ее в очередь Script Jobs?

Answer 1

Единственное упоминание ScriptJob с точки зрения постановки в очередь относится к пункту 8.6 RunJobs - на втором шаге написано:

  1. In an implementation-dependent manner, obtain the ECMAScript source texts (see clause 10) and any associated host-defined values for zero or more ECMAScript scripts and/or ECMAScript modules. For each such sourceText and hostDefined, do [...]

Тут написано примерно следующее: надо выбрать те скрипты, которым суждено исполняться - и положить их в очередь. Далее на третьем шаге описывается их исполнение по порядку.

В свою очередь, RunJobs в других местах спецификации не упоминается, это точка входа.

Получается, ScriptJob - это любой код, который хост решил загрузить и исполнить по каким бы то ни было причинам. Ключевой момент данного описания - в том, что постановка ScriptJob в очередь и исполнение всех очередей - два этапа одной и той же операции RunJobs, таким образом в соответствии со спецификацией невозможно исполнить произвольный код и при этом не исполнить ожидающих продолжений (PromiseJob).

Зачем все так сложно расписано - я не знаю. Видимо, они пытаются сделать такую спецификацию чтобы ее нельзя было в принципе прочитать по-разному (или просто нельзя было прочитать)

READ ALSO
Node.js node-config vs defer()

Node.js node-config vs defer()

День добрый, помогите разобраться:

161
Приватные свойства в js

Приватные свойства в js

Я не знаю как правильно сказать, но как сделать свойство, которое было бы не видно внешне, но было бы видно методам установленных через прототип?...

237
как показать текст, если на странице сайта не показалось изображение?

как показать текст, если на странице сайта не показалось изображение?

Как показать текст на сайте если по каким то причинам не показалось изображение определенного размера, либо баннер? Знаю что есть некоторые...

171