JavaScript 和 Angular 回调

JavaScript and Angular callbacks

提问人:TheKingVaro 提问时间:7/8/2023 更新时间:7/8/2023 访问量:41

问:

下午好。

我目前正在开发一个 Angular15 应用程序,我正在使用一个 .js 文件,其中包含我需要在项目中使用的某些函数。 我能够使用这些功能,但是我已经到了不知道如何继续的地步,因为我发现了一个问题,我不知道它是否有解决方案,如果有,我不知道:

我必须使用这个 .js 文件的功能。此函数调用某个终结点,当调用完成时,它可以返回 OK 或错误。 该函数需要 2 个参数:一个用于 OK 的回调函数和另一个用于错误的回调函数。这些回调函数必须由我实现,并且根据执行的回调,函数会向该回调发送某些数据。

例如,如果执行 OK 的回调,则回调将收到一个包含 base64 内容的字符串。如果执行了错误的回调,则回调将收到一个包含错误类型的字符串和另一个包含错误消息的字符串。

我在.ts文件中有以下代码:

makeCall() {
this.JSLibrary.call(() => {this.callbackOK()}, () => {this.callbackError()});
}

callBackOK() {
console.log('OK');
}

callbackError() {
console.log('ERROR');
}

如您所见,我已经将两个回调函数定义为简单地执行控制台.log,并且 makeCall 方法将使用 JS 文件的函数调用。

问题是:我不知道如何将 JSLibrary.call 方法将发送到每个回调的信息传递到每个回调,因为如果我在回调函数中定义参数,那么打字稿编译器会说我没有在 JSLibrary.call 函数中传递这些参数:

callBackOK(base64: string) {
console.log(base64);
}

callbackError(errorType: string, errorMessage: string) {
console.log('ERROR': + errorType + errorMessage);
}

makeCall() {
this.JSLibrary.call(() => {this.callbackOK()}, () => {this.callbackError()});
}
ERROR BECAUSE I'M NOT PASSING THE PARAMETERS UP HERE

那么,问题是:有没有办法将信息传递给每个回调?

谢谢!

JavaScript Angular TypeScript 回调

评论


答:

0赞 Meqwz 7/8/2023 #1

变量是 JavaScript 和 TypeScript 中函数的一种内置功能,其行为类似于数组并保存传递给函数的所有值。arguments

您不必提前命名或定义参数。您可以简单地通过对象追溯访问它们。当您需要知道将传入多少参数时,这特别有用,例如在回调的情况下。arguments

但是,由于 ES6 (ECMAScript 6) 的改进,在许多情况下最好使用 rest 参数。它们的工作方式类似,但行为类似于真正的数组,并且具有更多功能。例如,可以对它们使用 forEach 和其他 Array 方法。...args

以下是定义函数的另一种方法:makeCall

makeCall() {
    this.JSLibrary.call((...args) => {this.callbackOK(...args)}, (...args) => {this.callbackError(...args)});
}

callbackOK(base64: string) {
  console.log(base64);
}

评论

0赞 Aluan Haddad 7/8/2023
是的,这是处理问题的适当方法。但是,值得考虑编写一个类型声明来描述库 API 的形状。
0赞 TheKingVaro 7/8/2023
你好!谢谢你的回答。您的解决方案几乎完美运行:我能够使用......args 并在 makeCall() 函数中传递它,但在 callbackOK 函数中我必须使用 ...args,因为如果我使用 base64: string,我会收到一个错误,告诉我需要在 makeCall() 中传递 base64 参数: spread 参数必须具有元组类型或传递给 rest 参数