Я пытаюсь создать скрипт node.js, используя soda.js для организации и написания Selenium скрипты. Проблема, с которой я сталкиваюсь, заключается в том, что я принципиально не понимаю философию цепочки soda.js, особенно and()
и документация очень слабо объясняет, как он работает.
Представьте себе следующий тестовый пример:
var soda = require('soda');
var assert = require('assert');
var browser = soda.createClient({
host: 'localhost',
port: 4444,
url: 'http://www.google.com',
browser: 'firefox'
});
browser
.chain
.session()
.open("http://www.google.com", function() {
console.log("open complete");
})
.and(function() {
console.log("and");
})
.and(function() {
return function(browser) {
console.log("and2");
}
}())
.end(function() {
console.log("end");
})
Мое понимание цепочек API заключалось в том, что это должно было предотвратить ад обратных вызовов. Итак, если я вызову browser.method1().method2().method3(). Затем метод2 будет ждать метода один. method3 будет ждать method2() и т. д. Дает вам простоту синхронного, но функциональность событийного.
Я жду
open complete
and
and2
end
я получил
and
and2
open complete
end
Какой? Это явно имеет какое-то отношение к методу and
, который, как я думал, объявлял ваши собственные произвольные функции, но, похоже, он не следует порядку очереди. Как вы можете видеть в тестовом примере, я пробовал два метода объявления функции and, один с использованием замыкания самовыполняющейся функции, а другой со стандартной анонимной функцией. Одинаковый результат в обоих случаях. Как заставить and()
следовать порядку очереди?