エラーがわかりませんが、タイプスクリプトのエラーメッセージがあります。エラーメッセージは次のとおりです。エラーのあるプロミスを拒否したときのタイプスクリプトエラーTS2345
error TS2345: Argument of type '(error: Error) => void | Promise' is not assignable to parameter of type '(reason: any) => IdentityKeyPair | PromiseLike'. Type 'void | Promise' is not assignable to type 'IdentityKeyPair | PromiseLike'.
私のコードは正常に働いていたが、私はこのブロックを変更したときに活字体が私に怒っ:この中
.catch((error) => {
let identity: Proteus.keys.IdentityKeyPair = Proteus.keys.IdentityKeyPair.new();
return this.store.save_identity(identity);
})
:ここ
.catch((error) => {
if (error instanceof RecordNotFoundError) {
let identity: Proteus.keys.IdentityKeyPair = Proteus.keys.IdentityKeyPair.new();
return this.store.save_identity(identity);
} else {
return reject(error);
}
})
は完了です実行していたコード:
public init(): Promise<Array<Proteus.keys.PreKey>> {
return new Promise((resolve, reject) => {
this.store.load_identity()
.catch((error) => {
let identity: Proteus.keys.IdentityKeyPair = Proteus.keys.IdentityKeyPair.new();
return this.store.save_identity(identity);
})
.then((identity: Proteus.keys.IdentityKeyPair) => {
this.identity = identity;
return this.store.load_prekey(Proteus.keys.PreKey.MAX_PREKEY_ID);
})
.then((lastResortPreKey: Proteus.keys.PreKey) => {
return resolve(lastResortPreKey);
})
.catch(reject);
});
}
そして、ここではをもうコンパイルされませんコードは次のとおりです。
public init(): Promise<Array<Proteus.keys.PreKey>> {
return new Promise((resolve, reject) => {
this.store.load_identity()
.catch((error) => {
if (error instanceof RecordNotFoundError) {
let identity: Proteus.keys.IdentityKeyPair = Proteus.keys.IdentityKeyPair.new();
return this.store.save_identity(identity);
} else {
return reject(error);
}
})
.then((identity: Proteus.keys.IdentityKeyPair) => {
this.identity = identity;
return this.store.load_prekey(Proteus.keys.PreKey.MAX_PREKEY_ID);
})
.then((lastResortPreKey: Proteus.keys.PreKey) => {
return resolve(lastResortPreKey);
})
.catch(reject);
});
}
活字体コンパイラはエラーコードTS2345
と私のreturn reject(error);
文を拒否した理由は、誰もが見ていますか?
スクリーンショット:
私は活字体2.1.4を使用しています。
'return reject(error)'の代わりに 'reject(error)'を実行すれば、 'エラーTS7030:すべてのコードパスが値を返すわけではありません。 –
私は同じことを達成する底のキャッチでちょうど捕らえられるエラーを投げるためにそれを変更しました。 – DeezCashews
あなたが最後の '.then'ブロックで何もしていないので、私はKulvarがあなたに見せたように前のもので解決します。彼がしたように拒否を渡すか、手動でエラーをキャッチして自分で拒否するかは、あなた次第です。私は読むのが簡単だと思いますが、やや冗長です。 – DeezCashews