Как преобразовать nodeList в массив в casperjs? [Дубликат]

Еще один подход к возврату значения из асинхронной функции - передать объект, который сохранит результат от асинхронной функции.

Вот пример того же:

var async = require("async");

// This wires up result back to the caller
var result = {};
var asyncTasks = [];
asyncTasks.push(function(_callback){
    // some asynchronous operation
    $.ajax({
        url: '...',
        success: function(response) {
            result.response = response;
            _callback();
        }
    });
});

async.parallel(asyncTasks, function(){
    // result is available after performing asynchronous operation
    console.log(result)
    console.log('Done');
});

Я использую объект result для хранения значения во время асинхронной операции. Это позволяет получить результат даже после асинхронного задания.

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

0
задан Artjom B. 14 October 2014 в 08:50
поделиться

1 ответ

Это имеет смысл, потому что elmnt.options в последнем фрагменте - массив, заполненный значениями undefined. Значит, вы знаете количество элементов, но не их ценности. Причина в том, что узлы DOM не могут быть переданы из контекста страницы. docs говорят:

Примечание. Аргументы и возвращаемое значение функции оценки должны быть простым примитивным объектом.

Замыкания, функции, узлы DOM и т. Д. Будут работать не !

/ blockquote>

Итак, либо вы делаете все внутри контекста страницы (evaluate), либо получаете представление узлов DOM, с которыми вы хотите работать. Я думаю, это не то, что вы хотите.

var elmnt = this.evaluate(function () {
    return [].map.call(document.getElementsByName("symbol")[0].options, function(option){
        return {text: option.innerText, value: option.value};
    });
});
3
ответ дан Artjom B. 31 August 2018 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: