Javascript 使用新参数重试承诺
我有一个promise函数_checkCookie,它检查cookie并在找到时解析,如果找不到则用false拒绝 该函数接受一个参数,即cookie名称 我现在正试图通过检查多个不同的cookie来解析用户名。如中所示,检查cookie A,如果没有,则检查cookie B,依此类推 我一直在让checkCookie函数从它自己的catch语句中重新运行。有没有一种方法可以让checkCookie尝试使用每个潜在的cookie名称,而不必在每个.catch()块中调用它Javascript 使用新参数重试承诺,javascript,es6-promise,Javascript,Es6 Promise,我有一个promise函数_checkCookie,它检查cookie并在找到时解析,如果找不到则用false拒绝 该函数接受一个参数,即cookie名称 我现在正试图通过检查多个不同的cookie来解析用户名。如中所示,检查cookie A,如果没有,则检查cookie B,依此类推 我一直在让checkCookie函数从它自己的catch语句中重新运行。有没有一种方法可以让checkCookie尝试使用每个潜在的cookie名称,而不必在每个.catch()块中调用它 您可以使用Promis
您可以使用
Promise.all()
,处理中的错误。然后()
或.catch()
防止Promise.all()
到达.catch()
potentialCookies=['cookieA'、'cookieB'、'cookieC']
函数_checkCookie(cookieName){
返回新承诺((解决、拒绝)=>{
const cname=`${cookieName}=`;
const ca=document.cookie.split(“;”);
for(设i=0;i
您不希望重新抛出原始错误并忽略\u checkCookie
调用的结果。相反,返回您得到的承诺,以便链中的下一个函数等待它:
_checkCookie("CookieA")
.catch(e => {
console.warn(e, '2');
return _checkCookie("CookieB");
})
.catch(e => {
console.warn(e, '3');
return _checkCookie("CookieC");
});
为什么你要对完全同步的事情使用承诺?@Bergi“为什么你要对完全同步的事情使用承诺?”如果你对问题的评估是,
承诺
不是满足要求的必要条件,为什么你要用承诺
发布答案?“否决票”描述?回答时JavaScript有什么问题?
_checkCookie("CookieA")
.catch(e => {
throw e
})
.catch(e => {
_checkCookie("CookieB")
console.warn(e, '2')
throw e
}).
catch(e => {
_checkCookie("CookieC")
console.warn(e, '3')
throw e
})
potentialCookies = ['cookieA','cookieB','cookieC']
function _checkCookie(cookieName) {
return new Promise((resolve, reject) => {
const cname = `${cookieName}=`;
const ca = document.cookie.split(";");
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === " ") {
c = c.substring(1, c.length);
}
if (c.indexOf(cname) === 0) {
resolve(c.substring(cname.length, c.length));
}
}
reject(false)
}).then(function(data) {
return data
}
// handle error
, function(error) {
console.error(error);
return error + " no cookie found"
});
}
Promise.all(potentialCookies.map(_checkCookie))
.then(function(results) {
console.log(results)
})
_checkCookie("CookieA")
.catch(e => {
console.warn(e, '2');
return _checkCookie("CookieB");
})
.catch(e => {
console.warn(e, '3');
return _checkCookie("CookieC");
});