【发布时间】:2021-01-09 23:41:31
【问题描述】:
有一个函数可以处理来自扫描的响应:
export const handleScanResponse = (
scanResponse: IScanResponse,
visitors: IVisitor[]
): Promise<IVisitor | any> => {
return new Promise((resolve, reject) => {
if (!scanResponse || scanResponse.errorDesc !== "SUCCESS")
throw new Error("Scane response is empty!");
const found = visitors.find((p: IVisitor) => {
if (scanResponse && "qrcode" in scanResponse) {
return (
p.code && p.code.toLowerCase() === scanResponse.qrcode.toLowerCase()
);
} else {
return (
p.document_number &&
scanResponse.document_number &&
p.document_number.toLowerCase() ===
scanResponse.document_number.toLowerCase()
);
}
});
if (found) resolve(found);
reject(scanResponse);
}).catch((e) => console.log(e));
};
我尝试resolve, reject,以防在数组中找到用户但未找到用户。否则尝试抛出异常。
使用是:
handleScanResponse(
scanerResponseMockup,
this.visitorsService.visitors$.getValue()
).then(
(foundVisitor) => this.visitorWasFound(foundVisitor),
(scanResponse) => this.visitorNotFound(scanResponse)
);
如何正确地做到这一点?为什么尽管有例外我总是去.then( (foundVisitor) => this.visitorWasFound(foundVisitor)?
【问题讨论】:
-
在 Promise 构造函数中,你必须
resolve()或reject()。在.then()和.catch()回调中,您必须使用return或throw。
标签: javascript typescript promise