[英]Rewite fetch function in jQuery.ajax()
當前使用提取的解決方案
目前,我們已經實現了該功能,並且運行良好。
function setupCKConnect() {
fetch('ajax/myfile.php?id=1234567')
.then(response => {
response.json()
.then(json => {
function1(json)
.then(data => {
function2()
})
.catch(data => {
setupCKConnect()
});
});
});
};
上面代碼的解釋
為什么我們需要改變
不幸的是,我們的客戶群中似乎有很大一部分使用的設備不支持訪存。
因此,我試圖使用jQuery.ajax()重寫此代碼。
我知道這似乎在倒退,但是在這種情況下是有必要的。
新密碼
下面是我到目前為止的代碼。 請注意,我沒有嫁給jQuery,因為有人可以提供更好的選擇。
到目前為止,我有以下代碼:
function setupCKConnect() {
$.ajax({
type: "GET",
dataType: 'json',
url: 'ajax/myfile.php?id=1234567'
}).done(function(data) {
function1(data)
}).done(function() {
function2()
}).fail(function(jqXHR, textStatus, errorThrown) {
setupCKConnect()
});
};
新代碼的問題
新代碼實際上工作得很好,除了一點點
任何人都可以幫助解釋如何在function1()完成之前停止function2()的執行
協助表示贊賞
因此,ajax響應返回一個延遲的對象,而不是一個promise。 這些看起來很相似,但是將兩者混為一談就可以了。 我已經基於deferred.done文檔創建了一個js小提琴來說明我的意思。
我敢冒險猜測function1(json)
返回一個promise。 延遲者獲取值(未解決的承諾)並認為“讓我們繼續前進”,您要么需要異步/等待,要么調用該函數,然后暫停執行其他任何操作。
如果您修復了原始代碼的縮進,您將看到問題。 要調用function2()
不在.then()
多數民眾贊成鏈接到第一個.then()
它被稱為上的結果function1()
而且.catch()
也從那里被調用,而不是從fetch()
.catch()
被調用,因此您不能使用.fail()
作為替代。
function setupCKConnect() {
fetch('ajax/myfile.php?id=1234567')
.then(response => {
response.json()
.then(json => {
function1(json)
.then(data => {
function2()
})
.catch(data => {
setupCKConnect()
});
});
});
};
因此,您需要類似地構造jQuery代碼。
function setupCKConnect() {
$.ajax({
type: "GET",
dataType: 'json',
url: 'ajax/myfile.php?id=1234567'
}).done(function(data) {
function1(data)
.then(function(data) {
function2()
})
.catch(function() {
setupCKConnect(data)
});
})
};
假定function1()
與原始版本相似,因此它會返回一個promise。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.