4 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個贊
腳本中有 2 個錯誤:
是一個匿名函數(shù),它不被調(diào)用,只是聲明,
function()
匿名函數(shù)未返回聲明的承諾
Promise.resolve(null);
溶液:
return fetch(templatePath)
.then((response) => {
if (response.ok) return response.text();
console.error(`Template ${templatePath} not found.`);
return null;
})
.then(...

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個贊
您不必創(chuàng)建函數(shù),只需使用逗號運(yùn)算符 (),該運(yùn)算符計(jì)算兩個操作數(shù),并返回最后一個:,
return fetch(templatePath)
.then(
(response) => response.ok ? response.text() : (console.error(`Template ${templatePath} not found.`), null)
)
.then((templateHtml) => {
newElement.innerHTML = templateHtml;
while (newElement.firstChild) {
oldElement.appendChild(newElement.firstChild);
}
})
但是,如果發(fā)生錯誤,建議拒絕承諾:
return fetch(templatePath)
.then(
(response) => response.ok ? response.text() : Promise.reject(new Error(`Template ${templatePath} not found.`))
)
.then((templateHtml) => {
newElement.innerHTML = templateHtml;
while (newElement.firstChild) {
oldElement.appendChild(newElement.firstChild);
}
})

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個贊
如果出現(xiàn)錯誤,則不返回函數(shù),只需返回 null。
每個塊返回一個承諾。當(dāng)您返回不是 promise 的內(nèi)容時,從傳遞給函數(shù)的回調(diào)函數(shù),函數(shù)返回的 promise 將在回調(diào)函數(shù)返回時解析,并立即使用回調(diào)函數(shù)返回的非 promise 值實(shí)現(xiàn)。thenthenthen
在您的例子中,如果發(fā)生錯誤,第一個函數(shù)調(diào)用返回的承諾將以 的值實(shí)現(xiàn)。thennull
如果傳遞給函數(shù)的回調(diào)函數(shù)的返回值本身就是一個 promise,則函數(shù)調(diào)用返回的 promise 將被解析但尚未結(jié)算。僅當(dāng)回調(diào)函數(shù)返回的 promise 已解決時,它才會結(jié)算。thenthen
在您的情況下,如果為 true,回調(diào)函數(shù)將返回 promise 。函數(shù)調(diào)用返回的承諾將被解析,但只有在此承諾結(jié)算后才會結(jié)算。response.okresponse.textthenresponse.text
return fetch(templatePath)
.then((response) => {
if (response.ok) return response.text();
console.error(`Template ${templatePath} not found.`);
return null;
})
.then((templateHtml) => {
newElement.innerHTML = templateHtml;
while (newElement.firstChild) {
oldElement.appendChild(newElement.firstChild);
}
})

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個贊
明白了
return fetch(templatePath)
.then((response) => {
if (response.ok) {
return response.text();
}
else {
console.error(`Template ${templatePath} not found.`);
return Promise.resolve(null);
}
})
.then((templateHtml) => {
newElement.innerHTML = templateHtml;
while (newElement.firstChild) {
oldElement.appendChild(newElement.firstChild);
}
})
添加回答
舉報(bào)