2014-04-08 86 views
0

我開始使用帶有promise庫的angularJS進行web應用程序開發,但現在我不得不在另一個項目上工作而沒有一個。我將如何做到這一點,而無需導入承諾庫。如何處理沒有承諾的異步函數?

我已經刪除了一些不相關的東西,但基本上我需要從後端獲取一個文件url,根據這個url創建一個元素,然後返回元素。事情是一旦我進入異步函數,我不知道如何返回來返回創建的元素。

 var userLogoAWS = null; 
     $.get("http://localhost:8080/apps/admin/file", 
       { 
       category: category, 
       filename: "logo.png" 
       }, 
       function(data){ 
       userLogoAWS = data; 
       }); 

     img.src = userLogoAWS; 

     //---- Create and Combine elements ---- 
     var element = anchor.appendChild(img); 

     return element; 
+0

你正在使用jQuery,所以你有一個承諾庫:'延期'對象是你的朋友 – collapsar

+0

嗯......不知道。我讀了一個關於「q」庫的地方,所以我認爲人們正在使用它。我要檢查jQuery的。順便說一句,沒有承諾,沒有辦法處理這個問題嗎? – user2483724

+0

'return $ .get(「http:// ...」,{})。then(function(result){var img = new Image(); img.src = result; anchor.appendChild(img); return img});'應該做的伎倆。 –

回答

1

在這種情況下,我會利用一個簡單的回調模式。有很多方法可以做到這一點,但關鍵是將處理ajax調用成功的函數作爲參數傳遞給調用ajax的函數。

function getLogo(createElement){ 
    $.get("http://localhost:8080/apps/admin/file", 
       { 
       category: category, 
       filename: "logo.png" 
       }, 
       function(data){ 
       createElement(data) 
       }); 
} 

function createElement(logo){ 
    var img = new Image(); 
    img.src = logo; 
    var element = anchor.appendChild(img); 
    return element; //or assign element to a global variable 
} 

var element = getLogo(createElement); 

如果這不起作用,JQuery有一個承諾庫,它似乎你正在使用jQuery,所以爲什麼不利用這一點。

-1
你正在使用jQuery,所以你 一個承諾庫

:在Deferred object是你的朋友。請參閱.promise method上的文檔。

+0

我不明白這是如何試圖回答這個問題。 –

+0

@BenjaminGruenbaum引用OP:'我開始用angularJS做web應用程序開發,它附帶一個承諾庫,但現在我必須在另一個項目上工作而沒有一個。我將如何做到這一點,而無需導入承諾庫。'。基本上說,如果他有一個承諾庫,他會知道如何繼續。他的代碼示例包含一個jquery方法調用。 jquery帶有promise對象。因此我的答案是將字符串放在一起。有關詳細信息,請閱讀kevinb的答案。 – collapsar

1

您不能返回創建的元素。期。幸運的是,您使用的jQuery自帶延遲/承諾系統,因此您可以繼續使用您的習慣設置。

function doSomething() { 
    return $.get("http://localhost:8080/apps/admin/file", { 
     category: category, 
     filename: "logo.png" 
    }); 
} 
doSomething().done(function(data){ 
    var img = new Image(); 
    img.src = data; 
    //---- Create and Combine elements ---- 
    var element = anchor/*where is anchor defined?*/.appendChild(img); 
});