gpt4 book ai didi

javascript - 具有公共(public)父类的可链接类

转载 作者:行者123 更新时间:2023-12-02 22:20:45 25 4
gpt4 key购买 nike

我正在尝试创建一个结构,在该结构中我可以堆叠扩展同一父类的多个类。我所说的堆叠是指在以下示例中堆叠then:

  promise.then(
data=>{
return promise;
}
).then(
data=>{
return promise;
}
).then(
....
)

其中第二个数据是由第一个返回的promise解析的数据。

对于我的情况,我有一个 operation 类,它有多个子类 createUsersendEmailgenerateConfig。我希望能够通过以下方式堆叠它们:

let generateConfigREturnedValue = createUser(null, usercreationInput)

.sendEmail(createUSerReturnedValue, sendEmailInput)

.generateConfig(sendEmailReturnedValue, generateConfigInput)

.finish();

我希望能够以上述方式堆叠任何扩展操作父类的类。

注意: ReturnedValue 参数不是以这种方式显式传递的,而是通过 nextInline 操作传递和接收它们的方式。

编辑:

因此,父 operation 类将有一个名为 execute 的抽象方法,在链接子类时将自动调用该方法(子类的主要代码将在该方法中)方法 )。因此,从技术上讲,我所说的类链接是在传递参数时链接每个类的 execute 方法。

我的想法:

  1. 将所有子操作添加到每个子操作的原型(prototype)中,这样所有子操作都会互相调用。之后,我需要在后台设置从一个操作传递到另一个操作的参数。

  2. 扩展父 operation 类上的原型(prototype)属性查找,以包括使用对象名称从依赖项容器(如 awilix )获取对象

我想做的事情是可以实现的吗?上面夫妇中最好的想法是什么?

最佳答案

首先,如果您的函数执行异步操作以获得结果,则您不能指望您的 .finish() 调用同步返回最终结果。您所能期望的最好的结果就是 .finish() 的 promise 。

我建议在 finish 方法中完成所有艰苦的工作,并让所有其他方法只收集输入数据。

我假设您已经拥有可用的核心异步函数,我将通过 api 对象引用它们:

class Chain {
createUser(userCreationInput) {
this.userCreationInput = userCreationInput;
return this;
}
sendEmail: function(sendEmailInput) {
this.sendEmailInput = sendEmailInput;
return this;
}
generateConfig(generateConfigInput) {
this.generateConfigInput = generateConfigInput;
return this;
}
async finish() {
let createUserReturnedValue = await api.createUser(null, this.userCreationInput);
let sendEmailReturnedValue = await api.sendEmail(createUserReturnedValue, this.sendEmailInput);
return api.generateConfig(sendEmailReturnedValue, this.generateConfigInput);
}
}

let generateConfigReturnedValue = await new Chain()
.createUser(usercreationInput)
.sendEmail(sendEmailInput)
.generateConfig(generateConfigInput)
.finish();

显然,await 应该在 async 函数上下文中使用。

这只是关注核心功能。您必须添加检查,以确保在调用 finish 时提供所有信息、处理错误处理等。

如果您不喜欢表达式中的 new Chain() 部分,那么您可以将这三个方法也定义为全局函数,并让它们返回 Chain< 的新实例。这是一个选择,要么乱扔全局命名空间,要么拥有额外的 new Chain()

中间立场是将函数也定义为静态方法 - 再次返回 Chain 的新实例。那么表达式将是:

let x = Chain.createUser(usercreationInput). // ...etc

关于javascript - 具有公共(public)父类的可链接类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59239194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com