我正在使用實習生JS/leadfood測試框架。我正在使用executeAsync。我期望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的回調。
我實現它,因爲你在這裏有代碼,但是'value'對我來說還是'undefined'。什麼是「完成」? – cosmosa
正如我所說的,'executeAsync'函數會自動傳遞一個回調作爲它的最後一個參數。這個回調函數可以調用任何你想要的東西(我通常稱之爲「完成」),應該在完成它所做的任何事情時由你的'executeAsync'函數調用。你不能從'executeAsync'函數返回一個承諾(你可以,但實習生不會注意它)。 'executeAsync'函數將在瀏覽器中運行,Promise可能不可用,因此Intern使用回調而不是承諾來獲取其返回值。 – jason0x43
因此,在傳遞給'executeAsync'的'script'參數傳入一個名爲'done'的函數之後,然後調用'done'作爲'executeAsync'中的最後一步來表明它已經完成執行,我期望值傳遞給'executeAsync'的回調函數(本例中爲'value')爲傳遞給'done'的值。但是'value'仍然是'undefined'。 – cosmosa