2015-10-12 3 views
1


Я соскабливаю веб-страницу с Кошмаром и хотел бы знать, как повторно использовать функцию над массивом входов.Как выполнять несколько функций 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() 
} 

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

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

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

+0

Что происходит, когда вы запускаете код? Вы также должны использовать url вместо http://cnn.com в функции goto. – tokeryberg

+0

У вас есть выход? –

ответ

0

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

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); 
    }); 
} 
Смежные вопросы