Javascript的Promise调用出现了Promise混淆

Javascript Promise calling a Promise confusion

本文关键字:Promise 混淆 调用 Javascript      更新时间:2023-09-26

我正在使用Javascript/Typescript创建一个返回和格式化的PersonModel对象的Promise。然而,我得到构建错误:

PersonService.ts

private encryptPerson(person: PersonModel): Promise<PersonModel> {
    return new Promise<PersonModel>(resolve => {  // <== line 332
        let password: string = person.password;
        this.encrypt(password).then((ciphertext: string) => {
            person.password = ciphertext;
            resolve(person);
        });
    },
        error => {
            console.error(error)
        });
}
private encrypt(value: string): Promise<string> {
    return new Promise<string>(resolve => {
        this.encrypter.encrypt(value).then((result) => {
            resolve(result);
        },
            error => {
                console.error(error)
            });
    });
}
误差

ERROR in ./app/pages/service/personService.ts
(332,16): error TS2346: Supplied parameters do not match any signature of call target.

任何帮助我应该如何构建这个感谢。

经以下T.J. Crowder的通知,我得到了以下内容:

private encryptPerson(person: PersonModel): Promise<PersonModel> {
    return new Promise<PersonModel>(resolve => {
        let password: string = person.password;
        this.encrypt(password).then((ciphertext: string) => {
            person.password = ciphertext;
            resolve(person);
        });
    });
}
private encrypt(value: string): Promise<string> {
    return new Promise<string>(resolve => {
        this.encrypter.encrypt(value).then((result: string) => {
            resolve(result);
        });
    });
}

您正在使用两个参数调用Promise构造函数:

private encryptPerson(person: PersonModel): Promise<PersonModel> {
    return new Promise<PersonModel>(resolve => { // <== line 332
            let password: string = person.password;
            this.encrypt(password).then((ciphertext: string) => {
                person.password = ciphertext;
                resolve(person);
            });
        },
        error => {                  // ** This is the
            console.error(error)    // ** second argument
        });                         // ** to the constructor
}

它只接受一个参数。我怀疑第二个箭头函数应该附在第一个箭头内部的then上。

另外,如果我对第二个函数的意思是正确的,请注意它将拒绝转换为使用undefined作为分辨率值的分辨率。由于undefined不是PersonModel,我猜这也会是一个问题。