從c#背景來看,我可能從完全錯誤的角度看待JavaScript,所以請耐心等待。如何處理JavaScript中的異步函數結果
留下async的優點,擱置一分鐘, 比方說,我只是想從HTML5頁面中的SQLite數據庫中檢索一個值。 我希望看到的是一樣的東西
var something = db.getPicture(1);
現在考慮一個(也許很幼稚)實現這一點:
this.getPicture(id)
{
this.database.transaction(function(tx)
{
tx.executeSql('SELECT ......', null, function(tx, results)
{
if (results.rows.length == 1)
return results.rows.items(0).Url; //This of course does not resturn
//anything to the caller of .getPicture(id)
}
},
function(error)
{
//do some error handling
},
function(tx)
{
//no error
});
}
首先,它是嵌套函數和第二個大混亂......我無法將我從數據庫中得到的結果作爲.getPicture()函數的值返回。
這是最簡單的版本,如果我想從一個表retreive指數第一, 然後使用該指數在接下來的查詢等什麼...
這是正常的JavaScript開發者,我是否完全錯誤,是否有解決方案等...
是的,你完全錯了:-)爲了處理事物的異步性,你需要傳遞* callback *函數。那些由運行時系統調用的時候需要這樣做,所以從回調中返回值沒有任何意義。 – Pointy 2012-02-24 12:15:59
爲了讓getPicture返回一些東西,需要在異步內容完成之前阻止getPicture的執行,並使用異步回調來填充返回變量。 – Alex 2012-02-24 12:21:35
@Pointy:考慮將你的評論升級到答案 – 2012-02-24 12:22:17