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, могут быть возвращены.
Что вы возвращаете из выполненной функции?