javascript - 在nodejs中使用一些同步代码是否可以

标签 javascript node.js asynchronous callback

我知道对于 I/O 操作(即数据库查询、Web 请求和磁盘访问),您必须使用这样的回调

fs = require('fs')
fs.readFile('test.txt', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  console.log(data);
});

但是说如果你有这样的同步代码

function Player(name){
    this.name = name;
    this.score = 0;
}
Player.prototype.calcScore = function(){
    //some special code here to calculate the score
    this.score =+ 10;
}
var player = new Player("Sam");
player.calcScore();
console.log(player);

或者您是否需要以如下回调方式编写它,其中 calcScore 方法可能仅包含一个 for 循环和一个 if 语句,并且不查询数据库等。

function Player(name){
    this.name = name;
    this.score = 0;
}

Player.prototype.setScore = function(data){
    this.score = data
}

Player.prototype.calcScore = function(callback){
    //some special code here to calculate the score
    var newscore = this.score += 10;
    callback(null, newscore);
}

var player = new Player("Sam");

player.calcScore(function(err, data){
    if(err){
        return console.log(err);
    }
    player.setScore(data);
    console.log(player);
});

我想我对何时使用异步代码或同步代码有点困惑。预先感谢您的帮助。

最佳答案

当您所做的只是 JavaScript 语句时,您无需设置异步回调。当您的代码处理“真实世界”时,会使用异步 API。当您访问 IO 设备或网络时,会使用异步 API,因为事件中存在不可预测的固有延迟。

如果您要进行大量计算,可以通过多种方式设置“连续”模型,允许定期中断工作,但这并不是一回事。 p>

edit — 一条评论明智地指出,使用异步 API 设计子系统确实没有坏处,即使它不是真正必要的。我还要指出,使用回调进行设计并非 用于异步机制。有充分的理由利用 JavaScript 函数作为值的灵 active 。

关于javascript - 在nodejs中使用一些同步代码是否可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14504009/

相关文章:

javascript - Nodejs异步数据库功能需要同步应答

javascript - 在 Touchable 高亮部分添加组件

javascript - Vue 路由器 beforeEnter 与 beforeEach

javascript - 将 JSON 文件数据填充到数组中,然后将数组输入到 mmenu 插件中

javascript - 如何仅在浏览器环境中执行函数

arrays - 在数组中搜索数据 [Node.JS]

node.js - Node JS - 将数据从 Busboy 流式传输到 AWS S3

javascript - 运行存储在对象中的函数

ajax - jQuery .always() 似乎在 $.get() 请求实际完成之前触发

javascript - 如何理解 JavaScript 同步/异步