首页 > 解决方案 > 这些基于承诺和基于回调的函数是否等效?来自 Eloquent Javascript 第 11 章 - 异步编程

问题描述

我一直在努力通过Eloquent Javascript 学习 Javascript。我目前正在阅读第 11 章:异步编程

下面我尝试制作本书中示例中给出的基于 promise 的函数的基于回调的版本。

这看起来和你们一样吗?测试表明它可能是,但是在与这部分代码交互的其他函数(模拟网络行为)中引入了一个不可预测的兔子洞——所以结果总是略有不同。任何意见/建议将不胜感激。

本章的所有相关代码都在这两个文件中:crow-tech-js11_async.js,可在本章的在线代码沙箱中找到。

书中给出的基于 Promise 的匿名函数:

(nest, content, source, callback) => {
    try {
        Promise.resolve(handler(nest, content, source)).then(response => callback(null, response), failure => callback(failure));
    } catch (exception) {
        callback(exception);
    }
}

//Below is the closure for 'handler' above (don't know if that is how you use 'closure' in a sentence)

(nest, {name,neighbors}, source) => {
    let connections = nest.state.connections;
    if (JSON.stringify(connections.get(name)) == JSON.stringify(neighbors)) return;
    connections.set(name, neighbors);
    broadcastConnections(nest, name, source);
}

我等效的基于回调的匿名函数

(nest, { name, neighbors }, source, callback) => {
  try {
    let connections = nest.state.connections;
    if (JSON.stringify(connections.get(name)) == JSON.stringify(neighbors)) {
      callback(null);
           return;
    }
    connections.set(name, neighbors);
    broadcastConnections(nest, name, source);
    callback(null, true);
  }
  catch (e) {
    callback(e);
  }
}

标签: javascriptasynchronouspromisecallback

解决方案


推荐阅读