gpt4 book ai didi

javascript - fetch() 调用不返回任何数据

转载 作者:行者123 更新时间:2023-11-28 16:50:37 24 4
gpt4 key购买 nike

我的 fetch() 调用无法正常工作。我有一个在该函数中调用自身的递归方法,但是一旦它传递了 if 语句,数据本身就不会被解析为下面的 .then() 调用。我想将递归方法保留在这个函数中。因为该函数调用的系统会将 data.result 更改为不为 null 的不同结果。我只是不知道什么时候会发生,因此这就是我使用递归方法的原因。

var someToken = "actually token";

function getResult(getToken) {
return new Promise((resolve, reject) => {
fetch(url, {
headers: {
"Authorization": something,
"Jenkins-Crumb": getToken
},
redirect: 'follow',

}).then(response => {
return response.json()

}).then(data => {

if (data.result == null) {
console.log('retrieving data')
getResult(getToken)
} else if (data.result == "SUCCESS") {
console.log('success')
resolve(data)
}

}).catch(err => {
reject(err)
})
})
}

getResult(someToken).then(data => {
console.log(data)
}).catch(err => console.log(err))

最佳答案

您需要返回 getResult 的递归调用避免 explicit Promise construction antipattern (只需返回 Promise 即可):

function getResult(getToken) {
return fetch(url, {
headers: {
"Authorization": something,
"Jenkins-Crumb": getToken
},
redirect: 'follow',
})
.then(response => response.json())
.then(data => {
if (data.result == null) {
console.log('retrieving data');
return getResult(getToken); // <-----------------------------
} else if (data.result == "SUCCESS") {
console.log('success');
return data; // <-------------------------------------------
}
// What if data.result is neither null nor SUCCESS? <--------
});
}

getResult(someToken).then(data => {
console.log(data);
}).catch(err => console.log(err))

现场演示:

const getUrl = () => Math.random() < 0.25 ? 'data:,{"result":"SUCCESS"}' : 'data:,{}';

function getResult(getToken) {
return fetch(getUrl(), {
headers: {
"Authorization": 'something',
"Jenkins-Crumb": getToken
},
redirect: 'follow',
})
.then(response => response.json())
.then(data => {
if (data.result == null) {
console.log('retrieving data');
return getResult(getToken); // <-----------------------------
} else if (data.result == "SUCCESS") {
console.log('success');
return data; // <-------------------------------------------
}
// What if data.result is neither null nor SUCCESS? <--------
});
}

getResult('someToken').then(data => {
console.log(data);
}).catch(err => console.log(err))

您还应该考虑 - .then 末尾的 ifelse if 可能无法涵盖所有​​可能性。如果 data.result 既不是 null 也不是 'SUCCESS' 怎么办?根据您当前的逻辑,getResult 调用将导致 data 在使用者中未定义。如果有可能发生这种情况,您可能想在这种情况下抛出错误或其他内容。

if (data.result == null) {
console.log('retrieving data')
return getResult(getToken) // <-----------------------
} else if (data.result == "SUCCESS") {
console.log('success')
return data; // <-----------------------
}
throw new Error('data.result is neither null nor 'SUCCESS'');

关于javascript - fetch() 调用不返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60012200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com