我正在尝试创建一个库来对Web应用程序进行API调用(jira,如果你想知道)我的api调用工作没有问题,但我希望使代码更具可读性和使用-能够。我试图寻找我的需求,但事实证明我不确定我需要搜索什么。
我遇到了依赖彼此的异步调用的问题,我知道我必须等到回调运行才能运行我的下一个项目,但我不确定设计它的最佳方法。
我真的想让Chaining成为我的api的一个功能,我希望看起来像这样:
createProject(jsonProjectStuff)
.setLeadUser("myusername")
.createBoard("boardName")
.setBoardPermissions(boardPermissionJSONvar)
.addRole(personRoleJSONvar);
使用此示例,所有内容都必须等待createProject
,因为它将返回项目。 createBoard
通常不依赖于项目,但在此背景下使用它应该被分配"对于所制作的项目,设置电路板权限仅依赖于createBoard
才能工作。 addRole
再次针对该项目。
我的问题是:
我可以想到几种方法让它工作,包括使用依赖树注册函数调用,然后在我们去的时候履行承诺,虽然这对我来说主要是概念性的,因为我试图决定最好的
编辑2016年2月19日
所以我更多地研究了这个问题,然后我决定选择性的"然后"只有在创建新项目时才与父项直接相关。
//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})
)
我非常喜欢这个解决方案,我唯一不确定该怎么做的是字符串"变量",我想它可能是"Blah blah Name " + this.project.key
无论哪种方式,我都不确定如何通过"然后" copyBoard
或saveFilterAs
访问它。功能
有什么想法吗?
答案 0 :(得分:-1)
我最近一直在使用Nightmare(无头浏览器)。
它有一个流畅的API,使用了漂亮的设计模式。
调用API并不直接执行操作,只有队列它们,当您准备好执行时,必须调用返回promise的end
函数。当队列完成异步执行时,将解除promise。
例如,在你的情况下
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
(或其他)。然后,异步完成操作序列,并使用promise来处理完成和错误。