Транспортир: Как работает promises?

У меня есть достойное представление о том, как работает библиотека $q в angular, но я не уверен, как их используют транспортир или веб-драйвер-js. (особенно потому, что использование немного отличается между транспортером/веб-драйвером/angular, я думаю)

Например, пример кода, который я видел в учебниках по утяжителям, как представляется, записывается по строкам и предполагает, что предыдущий закончен до следующего. (например, browser.get(url), за которым следует браузер .getTitle()) Есть ли какие-то неявные обещания? (Мне не нужно вручную откладывать разрешение/выполнение)

Я прочитал https://github.com/angular/protractor/blob/master/docs/getting-started.md и снял ссылки на документацию webdriver и apractator транспортира, но мое понимание все еще немного нечеткое. Некоторые функции возвращают значения, а некоторые возвращают promises как странное сочетание синхронного и асинхронного кода.

Ответ 1

Есть ли какие-то неявные обещания?

Глядя на https://github.com/angular/protractor/blob/master/docs/control-flow.md, похоже, что да, есть, используя очередь promises, называемую потоком управления. Итак, чтобы расширить ваш пример:

browser.get(url);
var title = browser.getTitle();
expect(title).toEqual('My Title');

Каждая из вышеперечисленных строк добавляет в очередь. Переменная title на самом деле является обещанием, которое в соответствующей точке потока управления expect распаковывается.

Ответ 2

Вот хорошая статья о потоке управления транспортиром, сама по себе вдохновленная API WebDriver.

Короче говоря (цитируя статью), вот как ControlFlow из WebDriver работает под капотом.

Когда вы пишете:

driver.get('http://www.example.com');
driver.findElement(elem).sendKeys('hello');

Что на самом деле происходит:

driver.get('http://www.example.com')
  .then(function() {
    return driver.findElement(elem);
  })
  .then(function(q) {
    return q.sendKeys('hello');
  });



Примечание. Я не намерен быть избыточным с принятым ответом, но я считаю, что увидеть, как promises на самом деле связаны друг с другом внутри, может помочь понять.