gpt4 book ai didi

javascript - 关于创建相互依赖的异步调用的建议

转载 作者:行者123 更新时间:2023-12-03 19:11:44 24 4
gpt4 key购买 nike

我正在尝试创建一个库来对 Web 应用程序进行 API 调用(jira,如果你想知道的话)我的 api 调用没有问题,但我希望使代码更具可读性和使用性-有能力的。我曾尝试搜索我的需求,但事实证明我不确定我需要搜索什么。

我遇到了相互依赖的异步调用的问题,我知道我必须等到回调运行才能运行我的下一个项目,但我不确定设计这个的最佳方法。

我真的很想让链接成为我的 api 的一个特性,我希望它看起来像这样:

createProject(jsonProjectStuff)
.setLeadUser("myusername")
.createBoard("boardName")
.setBoardPermissions(boardPermissionJSONvar)
.addRole(personRoleJSONvar);

在这个例子中,一切都必须等待 createProject,因为它将返回项目。 createBoard 通常不依赖于项目,但在这种情况下使用它应该“分配”给所做的项目,设置板的权限只依赖于 createBoard 到工作。 addRole 再次特定于项目。

我的问题是:

  1. 是否可以像这样切换上下文并在它们之间保留数据,而无需从硬编码的响应运行函数?
  2. 如果可行,这是个好主意吗?如果不是,我愿意接受其他方案。

我可以想到几种方法让它工作,包括用依赖树注册函数调用,然后在我们进行时履行 promise ,虽然这对我来说主要是概念性的,因为我正在尝试决定最好的.

编辑 2/19/2016

所以我对此进行了更多研究,并决定仅在创建新项目与父项目不直接相关时才选择“然后”。

//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”函数让 copyBoardsaveFilterAs 访问它。

有什么想法吗?

最佳答案

我最近一直在使用 Nightmare( headless 浏览器)。

它有一个流畅的 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 来处理完成和错误。

关于javascript - 关于创建相互依赖的异步调用的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35182404/

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