2016-03-18 34 views
1

所以我一直在回看一堆關於回調的問題,我似乎無法繞過我的大腦讓我自己的代碼正常工作。我正在嘗試使用Soundcloud API檢查網址以確保它們能夠直接播放工作聲音。Javascript中異步請求的「條件」回調

function urlOK(url){ 
    SC.initialize({ 
    client_id: 'my_client_id' 
    }); 
    SC.resolve(url).catch(function(error) { 
    console.log(error.message); 
    return false; // have tried callback here 
    }); 
    // also want to return true if no errors are found 
} 

function checkAllInput(){ 
    if(urlOK(some_url){ 
    // do more logic 
    } 
} 

通過顯示的代碼,urlOK當然會吹過resolve()調用並在checkAllInput函數中「返回」false。我已經嘗試在所指定的位置向urlOK添加回調函數,並正確處理了錯誤的URL輸入。良好的URL輸入雖然沒有「捕捉」,但我對於如何繼續進行了很大的困惑。

如果使事情變得更容易,我很樂意使用jQuery。 :)我也接受完全不同的方法,並會盡我所能回答問題。感謝您的任何幫助!

+0

'urlOK'是異步的,[你不能'return'(HTTP:/ /stackoverflow.com/q/14220321/1048572?how-to-return-the-response-from-an-asynchronous-call)它的任何值。改爲返回布爾值的延遲/承諾。 – Bergi

+0

Ahhhhh,好的,我明白了,非常感謝! – WhudderButter

回答

0

你在這裏看到的是一個承諾。不是回調。

參見:Promise - MDN

如果你想使用一個回調,你會想要做這樣的事情:

function urlOK(url, callback, error){ 
    SC.initialize({ 
    client_id: 'my_client_id' 
    }); 

    SC.resolve(url).then(callback).catch(error); 
} 

function urlIsGood(){ 
    console.log('Url is good') 
} 

function urlIsBad(){ 
    console.log('Url is bad') 
} 

function checkAllInput(){ 
    urlOK(some_url, urlIsGood, urlIsBad) 
} 
+0

完美,非常感謝! – WhudderButter

+0

感謝您的編輯,這是你的超級好。希望這也能幫助其他API新手。 :) – WhudderButter