JavaScript 异步编程新手。有什么建议吗?

2024-03-19

异步回调很棒,但是当一个回调依赖于另一个回调的结果时,我会使用具有回调的 api 调用进行回调,等等。

apiCall(function () { apiCall(function () { apiCall(function () ...

我可以命名回调函数,而不是将它们内联包含在内。它看起来更漂亮并且嵌套更少,但我认为它并不容易阅读。

这是一个例子。我需要查询本地sqlite数据库,使用结果查询服务器,然后使用响应更新本地数据库。

function sync() {
  db.transaction(
function (transaction) {
  execute(transaction, 'SELECT max(server_time) AS server_time FROM syncs;', [],
      function (transaction, results) { // Query results callback
        var t = results.rows.item(0).server_time;
        $.post('sync.json', { last_sync_time: (t || '1980-01-01') },
           function (data) { // Ajax callback
             db.transaction(
               function(transaction) {
                 $(data.thing).each(function () {
                              var thing = new Thing(this.thing);
                              thing.insert(transaction);
                            });
               });
           });
      });
});
}

有没有办法解决这个问题(除了命名回调之外)?


我认为您通过命名函数而不是内联编写它们来丢弃非嵌套的东西太快了。这几乎是清理混乱的唯一方法。

代替:

do_a(
  function () {
    // more nesting...
  }
);

使用名称来为每个函数提供一些清晰度和目的:

function on_a_complete() {

}

do_a(on_a_complete);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 异步编程新手。有什么建议吗? 的相关文章

随机推荐

  • 自定义 MKAnnotation 按钮

    I d like to generate a custom annotation using MKAnnotation annotationView image UIImage named annotation this is to set
  • rmarkdown:手动指定pandoc路径?

    我有一个定期渲染的 rmarkdown 文档rmarkdown render 它在我的计算机 Windows 上运行良好 因为我安装了 RStudio 并且它自动设置了 pandoc 的路径 但是 当我尝试在我的服务器 RStudio 外部
  • 如何使用定时器动态调整帧大小?

    我正在尝试使用 Timer 对象动态调整窗口大小 但没有成功 我在构造函数中设置了面板的首选大小 这很好地设置了窗口的大小 尽管只有一次 程序初始化后首选大小会发生变化 但窗口大小保持不变 为什么 因为构造函数只初始化一次 因此不受大小变化
  • 如何在 AWS Glue 中设置多个 --conf 表参数?

    AWS Glue 的 stackoverflow 上的多个答案都说要设置 conf 表参数 但是 有时在一项作业中 我们需要在一项作业中设置多个 conf 键值对 我尝试了以下方法来设置多个 conf 值 所有这些都会导致错误 添加另一个名
  • 实现游程编码

    我编写了一个程序来执行游程编码 在典型情况下 如果文本是 AAAAAABBCDEEEEGGHJ 游程长度编码将使其 A6B2C1D1E4G2H1J1 但它为每个非重复字符添加了额外的 1 因为我用它压缩 BMP 文件 所以我想到了放置一个标
  • GPS 位置未正确检索

    我是 Android 开发新手 我了解 Android 活动生命周期 请看下面的代码 public class MyTest extends Activity Override public void onCreate Bundle sav
  • *.suo 文件中实际包含什么?

    我读过有关解决方案用户选项文件的 MSDN 文章 https msdn microsoft com en us library bb165909 aspx 解决方案用户选项文件用于存储用户首选项设置 并在 Visual Studio 保存解
  • 对具有相似名称的多组列使用相同的 mutate

    想象一下以下数据 data lt tribble a1 a2 b1 b2 c1 c2 32 32 50 12 12 50 48 20 55 43 10 42 对于 i 1 2 我想计算deltai ai ci ai bi ci ai 我明确
  • TCP/IP 套接字是原子的吗?

    据我了解 如果写入的数据量很小 则对 TCP IP 套接字的写入将是原子的 我所说的原子性是指接收者将接收所有数据或不接收任何数据 但是 如果写入的数据量很大 则它不是原子的 我对么 如果是的话 什么算大呢 谢谢 鲍勃 不 TCP 是一种字
  • Executor 和 ExecutorService 有什么区别? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想知道 Executor 和 Ex
  • 在 BlackBerry 中单击事件期间更改 ButtonField 背景

    在 BlackBerry 中 如何更改ButtonField点击事件期间的背景颜色 例如 对于长按 背景颜色需要改变 对我来说 它采用默认颜色蓝色 如何改变呢 这是我们的自定义按钮字段 但它显示按钮单击事件的默认蓝色 public clas
  • 高效地从TextureView获取Bitmap

    我试图从一个TextureView 不幸的是尝试 textureView getBitmap 导致性能缓慢是否有更快的方法来获取位图 使用 NDK 是否更好 寻找实际例子 TextureView 接收 SurfaceTexture 上的帧
  • 当前对控制器类型 {1} 上的操作 {0} 的请求不明确

    我有两个动作 我想要我的路线 users and users id 与众不同 然而它给我带来了错误 是否可以在不手动创建的情况下实现这种事情every路线 我将有其他控制器将遵循类似的模式 并为所有这些控制器编写自定义路线 一般来说似乎是多
  • 请求网站时,Javascript 用户代理 (ajax) 与发送的用户代理不同

    我注意到我的手机 OnePlus 3 Android 8 0 0 上的 Chrome 64 0 3282 137 在请求网页时发送的用户代理与通过 ajax 发送的请求略有不同 该用户代理在请求网页时发送 Mozilla 5 0 Linux
  • 将字符串转换为 React JSX

    Goal 我想将包括 React 组件的字符串转换为功能齐全的 JSX 更简单的例子是这样的 Stack Overflow 上有很多解决方案 render let txt span b Hello World b span return d
  • 如何检查输入值是否在数组中(Powershell)

    InputArray a e i o u 1 2 3 4 5 UserInput Enter any value 我们如何检查 UserInput is in InputArray或不提示输入正确 Use the contains操作员 I
  • 在 r 中创建一个基于其他列自动递增的列

    我的数据框有客户 ID 产品和日期 我需要创建一个列 每次 customerID 或日期更改时都会生成交易 ID 我的数据框目前看起来像 客户 ID 产品 日期 23 abv 12 12 14 23 政府飞行服务处 12 12 14 18
  • 如何使用 Firebase Cloud Messaging 将推送通知发送到多个设备

    我正在寻找一种将推送消息从我的 Express JS 服务器传递到我的离子应用程序的方法 我发现GCM 使用 GCM 我可以传递传递令牌列表的消息 如下所示 sender send message registrationTokens de
  • AddressSanitizer 中的“影子字节”是什么?我应该如何解释它们?

    我正在调试 C 程序并且严重困惑当发现问题时 大约是 AddressSanitizer 输出的下半部分 让我们以此为例 33184 ERROR AddressSanitizer heap buffer overflow on address
  • JavaScript 异步编程新手。有什么建议吗?

    异步回调很棒 但是当一个回调依赖于另一个回调的结果时 我会使用具有回调的 api 调用进行回调 等等 apiCall function apiCall function apiCall function 我可以命名回调函数 而不是将它们内联