Javascript 关于创建相互依赖的异步调用的建议
我正在尝试创建一个库来对web应用程序进行API调用(jira,如果你想知道的话),我的API调用工作没有问题,但我希望使代码更具可读性和可使用性。我试着寻找我的需要,但结果我不确定我需要寻找什么 我对相互依赖的异步调用有一个问题,我知道我必须等到运行回调才能运行下一项,但我不确定设计它的最佳方法 我真的很想让链接成为api的一个功能,我希望它看起来像这样:Javascript 关于创建相互依赖的异步调用的建议,javascript,asynchronous,promise,fluent,method-chaining,Javascript,Asynchronous,Promise,Fluent,Method Chaining,我正在尝试创建一个库来对web应用程序进行API调用(jira,如果你想知道的话),我的API调用工作没有问题,但我希望使代码更具可读性和可使用性。我试着寻找我的需要,但结果我不确定我需要寻找什么 我对相互依赖的异步调用有一个问题,我知道我必须等到运行回调才能运行下一项,但我不确定设计它的最佳方法 我真的很想让链接成为api的一个功能,我希望它看起来像这样: createProject(jsonProjectStuff) .setLeadUser("myusername") .creat
createProject(jsonProjectStuff)
.setLeadUser("myusername")
.createBoard("boardName")
.setBoardPermissions(boardPermissionJSONvar)
.addRole(personRoleJSONvar);
在本例中,一切都必须等待createProject
,因为它将返回项目createBoard
通常不依赖于项目,但在这种情况下,它应该“分配”给所做的项目,设置板权限仅依赖于createBoard
来工作<代码>添加角色再次特定于项目
我的问题是:
//Numbers are ID, string is Name
copyProject(IDorName)
.setRoles(JSONItem)
.setOwner("Project.Owner")
.setDefaultEmail("noreply@fake.com")
.then(
copyBoard(IDorName)
.setName("Blah blah Name {project.key}"),
saveFilterAs(IDorName, "Board {project.key}",
"project = {project.key} ORDER BY Rank ASC")
.setFilterPermissions({shareValuesJSON})
)
我非常喜欢这个解决方案,唯一不确定的是字符串“variables”,我想它可能是“Blah Blah Name”+this.project.key
无论哪种方式,我都不确定如何通过“then”功能授予复印机
或savefiltera
访问权限
有什么想法吗?我最近一直在使用噩梦(无头浏览器)
它有一个使用良好设计模式的流畅API
调用API不会直接执行操作,它只对操作进行排队,当您准备执行时,必须调用end
函数,该函数返回一个承诺。当队列完成异步执行时,将解析承诺
例如,在你的情况下
createProject(jsonProjectStuff)
.setLeadUser("myusername")
.createBoard("boardName")
.setBoardPermissions(boardPermissionJSONvar)
.addRole(personRoleJSONvar)
.end() // Execute the queue of operations.
.then() => {
// All operations completed.
))
.catch(err => {
// An error occurred.
});
我觉得这个图案很优雅。它允许您使用流畅的API来构建一系列操作。然后,当您准备好执行上述操作时,您可以调用
end
(或其他)。然后异步完成操作序列,您可以使用承诺来处理完成和错误。这似乎是个好主意。。。您可以存储最后一个承诺,对于调用的每个函数,您可以链接到最后一个承诺,并更新最后一个承诺变量。@JoaozitoPolo如果调用一个函数4 deep,需要第一次调用的变量,你介意展示一个简单的例子,这样我可以根据自己的需要修改和使用它吗?相关:。本质上,javascript足够灵活,可以支持您想象的任何异步流畅模式,但它们不一定是性能良好或易于实现的。我们仍在为此使用事件系统,但我期待着反应式编程检查,您可以在其中观察和执行subscribe@Krum110487:给定箭头函数,上下文并不是什么问题。一般来说,我认为让实例的状态与承诺相关联是一个坏主意,而不是为具有定义良好的状态的实例做出承诺(另请参见)。当然,这对实例上的方法链接是有害的;尽管如此,如果您坚持使用流畅的接口,您不应该放弃这一原则,而是应该围绕实例的承诺构建第二个类,并为其提供可链接的方法。