javascript - 这些基于承诺和基于回调的函数是否等效?来自 Eloquent Javascript 第 11 章 - 异步编程
问题描述
我一直在努力通过Eloquent Javascript 学习 Javascript。我目前正在阅读第 11 章:异步编程。
下面我尝试制作本书中示例中给出的基于 promise 的函数的基于回调的版本。
这看起来和你们一样吗?测试表明它可能是,但是在与这部分代码交互的其他函数(模拟网络行为)中引入了一个不可预测的兔子洞——所以结果总是略有不同。任何意见/建议将不胜感激。
本章的所有相关代码都在这两个文件中:crow-tech-js和11_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);
}
}
解决方案
推荐阅读
- c# - 如何创建动态数据库连接字符串C#
- r - 我在集群上的 R 中运行 1000 个并行模拟。之后管理和重新组合结果的最佳方法是什么?
- c++ - 具有专用成员函数的默认模板参数
- reactjs - 将 redux 存储与 Tampermonkey 一起使用
- python - Python和matlab给出不同的答案
- php - 如何只为表中的唯一行推出 JSON?
- multithreading - 这种死锁在 Scala Future 中是如何发生的?
- for-loop - 如何在 ecal echo 中换行?在 bash 脚本中
- javascript - 使矩形闪烁
- python - Tkinter (Python) 将随机数输出到 GUI