簡體   English   中英

我如何在函數外返回?

[英]How do I return outside of the function?

如何將$ .ajax內部的值返回到外部函數? 在下面的示例中,我希望getProxySrc()返回streamSrc。 另外,我不想在javascript /頁面發生時將其綁起來...但是同時,特定的代碼塊需要xml輸出才能繼續。 最好的處理方式是什么? 某種輪詢?

function getProxySrc(xmlSrc){
    var streamSrc;
    $.ajax({
        type: "GET",
        url: xmlSrc,
        dataType: "xml",
        success: function(xml, textStatus) {
            $(xml).find('VideoStream').each(function(){
                streamSrc = $(this).text();
                console.log("Stream found: " + clip);
                return streamSrc;
            }); 
        }
    });
}

這已經是異步的,因此一旦請求開始,腳本線程就釋放了。

不幸的是,由於您沒有同步調用棧,因此無法返回。 您必須讓成功處理程序使用接收到的值來調用過程的下一部分。

請查看一些JavaScript Promise庫,這些庫旨在為您提供一種更好的方式來描述跨越許多異步調用的工作流。

該項目適用於MooTools,但自述文件很好地描述了問題的性質以及“承諾”樣式解決方案的性質。

https://github.com/ShiftSpace/promises

瀏覽器中的JavaScript是單線程的。 例如,您不能使用循環異步地等待操作完成。

您可能需要在請求完成時使回調函數調用另一個函數(而不是以某種方式“返回”另一個函數),或者使AJAX請求同步(通過在請求選項中傳遞async: false )。

由於您不想阻塞,因此將回調保留為唯一選項。 如果您願意稍微更改設計,則可以在getProxySrc函數中添加第二個參數,該參數將在getProxySrc proxy-src時執行:

function getProxySrc(xmlSrc, onProxyObtained) {
    $.ajax({
        //...
        success: function(xml, textStatus) {
            // ...
            if (onProxyObtained) {
                onProxyObtained(theProxy);
            }
        }
    });
}

然后,調用者可以傳入一個函數,以在結果可用后立即對結果執行任何所需的操作,而無需輪詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM