JavaScript 如何最好地在对象中实现 return 承诺?

How best way in JavaScript to do return promise in object?

在我的这部分代码中,试图识别它之前和已经 return 是 CPF 还是 CNPJ 是否有效,我需要 Validate () 函数的结果来return 到 {valid: true} 对象,但它只有 returns {valid : Promise {}},我尝试放置 async 和 await 但结果相同。 :-(

他不期待诺言。我尝试了 promise.resolve(Valid (number, type)),但 return 是 .

有什么建议吗?

function cpfcnpj (doc){
    let valid = false,
        number = doc.toString().replace(/\D/g, ''),
        masked = false,
                type = number.length === 11 ?
            'CPF' : number.length === 14 ?
                'CNPJ' : false

    if (type === 'CPF') {
        masked = number.replace(
            /(\d{3})(\d{3})(\d{3})(\d{2})/,
            "..-"
        )
    }
    if (type === 'CNPJ') {
        masked = number.replace(
            /^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})/,
            "../-"
        )

    }

    function Valida(number, type)
        valid = true;

        let Soma = 0, Resto;

        if (number == "00000000000") valid = false;

        for (i = 1; i <= 9; i++) Soma = Soma + parseInt(number.substring(i - 1, i)) * (11 - i);
        Resto = (Soma * 10) % 11;

        if ((Resto == 10) || (Resto == 11)) Resto = 0;
        if (Resto != parseInt(number.substring(9, 10))) valid = false;

        Soma = 0;
        for (i = 1; i <= 10; i++) Soma = Soma + parseInt(number.substring(i - 1, i)) * (12 - i);
        Resto = (Soma * 10) % 11;

        if ((Resto == 10) || (Resto == 11)) Resto = 0;
        if (Resto != parseInt(number.substring(10, 11))) valid = false;
         
        return valid
    }

    return {
        type: type,
        valid: Promise.resolve(Valida(number, type))
                    .then(valid => { return valid }),
        number: number,
        masked: masked
    }
}


console.log(cpfcnpj('123.456.789-01'));
console.log(cpfcnpj('123 456 789@12'));
console.log(cpfcnpj('11.911.119/0001-9'));
console.log(cpfcnpj('11.9s11.1d19%0001&9'));

RETORNO:


{
  type: 'CPF',
  valid: Promise { <pending> },
  number: '12345678901',
  masked: '123.456.789-01'
}
{
  type: 'CPF',
  valid: Promise { <pending> },
  number: '12345678912',
  masked: '123.456.789-12'
}
{
  type: false,
  valid: Promise { <pending> },
  number: '1191111900019',
  masked: false
}
{
  type: false,
  valid: Promise { <pending> },
  number: '1191111900019',
  masked: false
}

这看起来像是过度设计出了问题。没有理由在这里使用 Promise,因为没有发生异步操作。只需使用函数的结果设置 return 对象中的值:

return {
    type: type,
    valid: Valida(number, type),
    number: number,
    masked: masked
}