这取决于要跳过的条件是什么,要执行的操作类型以及条件失败时整个事情的“有用性”。您可能可以在此处使用智能拒绝功能来传达消息。否则,我认为处理此问题的正确方法实际上是一组嵌套的promise调用。
这也符合 promises背后 的 核心思想 ,即将同步控制结构带回异步代码执行。通常,在使用Promise时,您应该首先考虑如何 使用同步代码
完成任务。如果您考虑自己的情况,它可能会像这样工作:
var contents = readFromFile();var results = initialOperation(contents);if (fancyCondition(results)) { results = doSomething(results); results = doMore(results);}processAndPrint(results);因此,您将在同步代码中找到一个真正的分支。因此,在使用诺言的异步代码中避免这种情况是没有意义的。如果您可以 跳过
某些事情,那么您实际上是在使用gotos进行跳转。但是,您可以分支并分别做其他一些事情。
因此,回到promise和异步代码,使用另一组链接的操作来创建实际分支是完全可以的,并且本着promise背后的意图进行。因此,上面的代码可能如下所示:
readFromFile(fileName).then(initialOperation).then(function (results) { if (fancyCondition(results) { return doSomething(results) .then(doMore); } return results;}).catch(errorHandler).then(processResults).then(outputResults); // Or `done` in Q另请注意,当您开始使用自行返回承诺的函数而不是从中内联创建承诺时,promise管道会自动看起来更加干净
then。



