與Narendra said類似,您目前尚未修改它return testarray
,因爲功能success()
尚未被調用。既然你沒有給我們更多的上下文,我會假設你正在做一些簡單的事情,所以我可以給你一個簡單的答案。讓我們假設你想要做這樣的事情:
for (testElement in test()) {
console.log(testElement);
}
現在,你還指望test()
返回一些成果,但它返回一個空Array
,所以什麼也沒發生。
爲了解決這個問題,你可以通過你要一起測試功能做一個函數,像這樣的內容:
function test(callback) {
var testarray=new Array();
function success() {
testarray.push("test1");
// Call the callback function:
callback(testarray);
}
}
myCallback = function(resultArray) {
for (testElement in resultArray) {
console.log(testElement);
}
}
test(myCallback);
// After some time...
// console: test1
好了,現在它的工作原理。我們已經定義了一個將被調用的回調函數,一旦異步代碼完成,testarray
作爲參數。但是,它可能仍然無法做你想做的,因爲它只能使用一次:
test(myCallback);
test(myCallback);
// After some time...
// console: test1
// console: test1
你再打電話test()
的那一刻,它會創建一個新的空數組,當sucess()
叫,推"test1"
到它。這可能不是你想要的(否則,你爲什麼會用array
?)
那麼,我們該如何解決這個問題呢?好了,我們只取陣列出來的功能,如:
function test(testarray, callback) {
function success() {
testarray.push("test" + (testarray.length+1));
callback(testarray);
}
}
myCallback = function(resultArray) {
for (testElement in resultArray) {
console.log(testElement);
}
}
myTestArray = new Array();
test(myTestArray, myCallback);
test(myTestArray, myCallback);
test(myTestArray, myCallback);
// After some time...
// Console: test1
// Console: test1
// test2
// Console: test1
// test2
// test3
這適用於同樣的原因,testarray是提供給在首位的功能success()
:,因爲JavaScript在創建一個「封閉」變量。這意味着因爲該變量是在內部函數中引用的,所以在外部函數返回後很長時間內它仍然可以在內部函數中使用。
我希望這會有所幫助。 :)
看起來好像你曾經*調用*成功函數,所以你期望什麼? – deceze
您的問題已被回答?如果不;爲什麼不? – PPvG