Javascript 使用新参数重试承诺

Javascript 使用新参数重试承诺,javascript,es6-promise,Javascript,Es6 Promise,我有一个promise函数_checkCookie,它检查cookie并在找到时解析,如果找不到则用false拒绝 该函数接受一个参数,即cookie名称 我现在正试图通过检查多个不同的cookie来解析用户名。如中所示,检查cookie A,如果没有,则检查cookie B,依此类推 我一直在让checkCookie函数从它自己的catch语句中重新运行。有没有一种方法可以让checkCookie尝试使用每个潜在的cookie名称,而不必在每个.catch()块中调用它 您可以使用Promis

我有一个promise函数_checkCookie,它检查cookie并在找到时解析,如果找不到则用false拒绝

该函数接受一个参数,即cookie名称

我现在正试图通过检查多个不同的cookie来解析用户名。如中所示,检查cookie A,如果没有,则检查cookie B,依此类推

我一直在让checkCookie函数从它自己的catch语句中重新运行。有没有一种方法可以让checkCookie尝试使用每个潜在的cookie名称,而不必在每个.catch()块中调用它


您可以使用
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");
});