Как выполнять несколько функций Nightmare асинхронно


Я очищаю веб-страницу с помощью Nightmare и хотел бы знать, как повторно использовать функцию в массиве входных данных.

Допустим, у меня есть метод для получения заголовка страницы

function* test(url,callback) {
    var size = { width: 1920, height: 1080, 'use-content-size': true, show: true }

    var nightmare = Nightmare(size)
    var title = yield nightmare
    .goto('http://cnn.com')
    .evaluate(function () {
        return document.title
    });
    console.log(title)
    yield nightmare.end()
    callback()
}

Я хотел бы выполнить этот метод над массивом URL-адресов. Поэтому я использую асинхронную библиотеку, чтобы запускать весь массив и выполнять функцию test над массивом urls URL-адресов.

async.each(urls, test, function (err) {
    console.log('done!');
});

Но async.each не поддерживает функции генераторов. Как я могу изменить тестовую функцию на обычную функцию вместо функции генератора.


person David Barishev    schedule 12.10.2015    source источник
comment
Что происходит, когда вы запускаете код? Вы также должны использовать URL вместо cnn.com в функции перехода.   -  person tokeryberg    schedule 30.10.2015
comment
У тебя есть выход?   -  person lame_coder    schedule 09.01.2016


Ответы (1)


Я нашел способ сделать это - мне нужно использовать библиотеку обещаний для выполнения нескольких функций, и это нормальная функция.

function test(url){
    Promise.resolve(  // call for the promises library with the nightmare instance 
        nightmare
        .goto() //all the calls that you need
        .wait()
        .....    
        ).then(function (result) { //This function will be called when the block of commands is done , with the result.
              console.log("Done")
        }, function (err) { //Error handling 
              console.log(err);
    });
}
person David Barishev    schedule 10.01.2016