2017-04-20 26 views
1

這是我做的Ajax調用:使用關鍵字等待模仿採用同步編程

$(document).on('click','#doit',clicked) 
 
clicked = function() { 
 
    var local = {} 
 
    local.type = 'post' 
 
    local.dataType = 'json' 
 
    local.data = {} 
 
    local.data.myid = 1234 
 
    var promise = $.ajax('myPage.cfm',local) 
 
    promise.done(done) 
 
    promise.fail(fail) 
 

 
    function done(response) { 
 
    } 
 

 
    function fail(xhr,status,response) { 
 
    $('body').html(xhr.responseText) 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

在這個例子中,donefail是回調。 但我在this article中讀到了一個叫做await的新關鍵字。

問:我讀這個權利,我不再需要回調和承諾?我可以按照以前的方式直接寫同步代碼?我如何使用await關鍵字重寫上述示例?

+0

其實,編寫* *任何代碼都到了'done'部分成功時,*或*去當有異常的'fail'部分,是挺難以同步方式寫入。 – Bergi

+0

你不必*使用'async' /'await'(尤其是當想要支持舊瀏覽器時)。寫簡單的承諾代碼就好了。 – Bergi

+0

如果我願意忽略'失敗'並使用try/catch它呢? –

回答

1

init() 
 
async function init() { 
 
\t var form = {} 
 
\t form.type = 'post' 
 
\t form.dataType = 'json' 
 
\t form.data = {} 
 
\t form.data.myid = 1234 
 
\t try { 
 
\t \t var ok=true 
 
\t \t var promise = await $.ajax('myPage.cfm',form) 
 
\t } catch(xhr) { 
 
\t \t console.log(xhr.responseText) 
 
\t \t ok=false 
 
\t } 
 
\t if (ok) { 
 
\t \t console.log(promise) 
 
\t } 
 
}