在你的代碼片段中,你不能從回調函數中斷開。在node.js中,回調函數在稍後未指定的時間在同一個線程上運行。這意味着,但回調函數執行的時間,for循環早已結束。
爲了獲得您想要的效果,您需要非常顯着地重構您的代碼。以下是你如何做到這一點的例子(未經測試!!)。想法是繼續使用項目列表調用doSomething()
,每次縮減一個元素,直到達到所需結果(您的中斷條件)。
function doSomething(res)
{
while (res.length > 0)
{
i = res.shift(); // remove the first element from the array and return it
if (i == 1)
{
sq3.query("SELECT * from students;",
function(err, res) {
if (err)
{
throw err;
}
if (res.length==1)
{
//do something
// continue with the remaining elements of the list
// the list will shrink by one each time as we shift off the first element
doSomething(res);
}
else
{
// no need to break, just don't schedule any more queries and nothing else will be run
}
});
sq3.end();
break; // break from the loop BEFORE the query executes. We have scheduled a callback to run when the query completes.
}
}
}
只寫'返回;' – exexzian
我想打破循環的,不只是從回調函數 – Edgar
那麼簡單break語句應該爲 – exexzian