Я использую стажер JS/тестирование тестовой среды. Я использую executeAsync. Я ожидаю, что возвращаемое значение из executeAsync будет передано в callback для 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
.
Edit: Я обнаружил, что даже если установить тайм-аут executeAsync очень большого числа, этот тайм-аут будет игнорироваться, если вы не вызываете this.async(timeout)
, указав правильный тайм-аут (по умолчанию 30 секунд во время письмо). Таким образом, проблема заключалась в том, что тест занимал более 30 секунд, и значение, переданное на выполнение, не превратило его в callback для executeAsync.
Я реализовал его, поскольку у вас есть код здесь, но 'value' для меня по-прежнему' undefined'. Что такое «сделано»? – cosmosa
Как я уже сказал, функция 'executeAsync' автоматически передает обратный вызов в качестве последнего аргумента. Этот обратный вызов, который вы можете вызывать независимо от того, что вы хотите (я обычно называю его «done»), должен быть вызван вашей функцией 'executeAsync', когда он закончит все, что он делает. Вы не можете вернуть обещание от функции 'executeAsync' (ну, вы можете, но Интерн не обратит на это внимания). Функция «executeAsync» будет запущена в браузере, где обещания могут быть недоступны, поэтому Intern использует обратный вызов, а не обещание получить его возвращаемое значение. – jason0x43
Итак, после передачи функции 'done' в параметр' script', переданной в 'executeAsync', а затем вызывая' done' в качестве последнего шага в 'executeAsync', чтобы сообщить, что он завершил выполнение, я ожидал бы, что значение передается обратному вызову 'executeAsync' (' значение' в этом случае) для значения, переданного 'done'. Но 'value' по-прежнему' undefined'. – cosmosa