executeAsync не передает возвращаемое значение обратному вызову

Я использую внутреннюю среду тестирования JS/leadfood. Я использую executeAsync. Я ожидаю, что возвращаемое значение от executeAsync будет передано в функцию обратного вызова executeAsync, но этого не происходит. Должна ли следующая работа?

return  this.remote.get(require.toUrl(url));
    //do stuff
    .executeAsync(function (done) {

        require([<library>],
            function ([<function>]) {
                return <function which returns Promise>
                .then(function (value) {
                    return <function which returns Promise>
                ...
                }).then(function () {
                    done(window.location);

                })
            })

    })
    .then(function (loc) {
        console.log(loc);
    })

Выполнение доходит до последнего обратного вызова в executeAsync успешно. Обратный вызов executeAsync вызывается успешно. Но значение, переданное обратному вызову executeAsync: undefined,

Изменить: я обнаружил, что даже если вы установите тайм-аут executeAsync очень большого числа, этот тайм-аут будет игнорироваться, если вы не вызываете this.async(timeout) указание правильного времени ожидания (по умолчанию 30 секунд на момент написания). Таким образом, проблема заключалась в том, что тест занимал более 30 секунд, а значение, переданное выполненному, не передавало его в функцию обратного вызова executeAsync.

2 ответа

Решение

executeAsync использует обратный вызов, чтобы определить, когда его функция закончила работу. Этот обратный вызов автоматически передается как последний аргумент (единственный аргумент, если вы больше ничего не передаете) executeAsync функция:

define([
    'require',
    'intern!object'
], function (
    require,
    registerSuite
) {
    registerSuite({
        name: 'test',

        foo: function () {
            return this.remote.get(require.toUrl('./index.html'))
                .setExecuteAsyncTimeout(5000)
                .executeAsync(function (done) {
                    var promise = new Promise(function (resolve) {
                        setTimeout(function () {
                            resolve();
                        }, 1000);
                    });

                    promise.then(function () {
                        return new Promise(function (resolve) {
                            setTimeout(function () {
                                resolve();
                            }, 1000);
                        });
                    }).then(function () {
                        done(window.location);
                    });
                })
                .then(function (loc) {
                    // This prints out a full location object from the
                    // browser.
                    console.log(loc);
                }); 
        }
    });
});

Согласно документам Leadfoot здесь

https://theintern.github.io/leadfoot/module-leadfoot_Command.html

Возвращает

Значение, возвращаемое удаленным кодом. Только значения, которые могут быть сериализованы в JSON, плюс элементы DOM, могут быть возвращены.

Что вы возвращаете из выполненной функции?

Другие вопросы по тегам