我对Node.js和JavaScript比较陌生 - 如果下面的问题是愚蠢的,请尽量使用它。 对我来说,异步处理的承诺是有道理的,但在串行/顺序处理方面,我并不是100%确信使用promise。让我们看一个例子(伪代码):使用承诺进行顺序处理
目标:读取文件,处理从文件中读取的内容并使用HTTP发送呼叫发送通知 。
bendUniverseWithoutPromise: function() {
var data = fs.readFileSync(..); //Read the file
var result = processData(data);
this.postNotification(data);
}
在上面的函数中,processData()不能运行,直到我们读取文件。在我们完成处理之前,我们无法发送通知。
让我们看看一个稍微不同的版本(假设上述各方法调用的返回一个承诺或我们总结他们的承诺):
bendUniverseWithPromise: function() {
return new Promise(function() {
fs.readFileAsync(fileName)
.then(processData(data))
.then(postNotification(result))
})
}
现在,我的问题是:
- 看到在这种情况下我们需要串行/顺序处理,承诺版本如何比非承诺版本更好?有什么比第一个例子更好?也许这是一个不好的例子,但那么什么是证明差异的好例子?
- 除了语法,承诺版本的代码可读性方面增添了些许(只有一点点),并可以得到嵌套的承诺,上下文(这个!)等
- 我明白,在技术上,第一相当复杂方法将不会返回,直到完成所有处理并且第二个将立即返回并且处理虽然仍然是连续的(在该方法的上下文中)将在后台继续。
- 是否有关于使用承诺的一般规则?有没有任何模式和反模式?
在此先感谢您。
一个很好的规则是,也许它需要时间和用户会认为我的应用程序没有响应,或者在执行此操作的用户可以做其他事情?如果是这样,去异步 – Luizgrs
你是不是指'this.postNotification(result);'? – Bergi
您可能会发现[这些经验法则](http://stackoverflow.com/a/25756564/1048572)娱乐 – Bergi