if-else流入承诺

if-else流入承诺

这是我的代码的简短版本。

var Promise = require('bluebird');var fs = Promise.promisifyAll(require("fs"));if (conditionA) {
  fs.writeFileAsync(file, jsonData).then(function() {
    return functionA();
  });} else {
  functionA();}

两种情况都要求functionA。有办法避免其他条件吗?我可以,fs.writeFileSync但我正在寻找一个非阻塞的解决方案。


三国纷争
浏览 555回答 3
3回答

隔江千里

我想你在找(conditionA   ? fs.writeFileAsync(file, jsonData)  : Promise.resolve()).then(functionA);这是短的var waitFor;if (conditionA)    waitFor = fs.writeFileAsync(file, jsonData);else    waitFor = Promise.resolve(undefined); // wait for nothing,                                          // create fulfilled promisewaitFor.then(function() {    return functionA();});

波斯汪

您总是可以使用Promise.all()条件函数var condition = ...;var maybeWrite = function(condition, file, jsonData){     return (condition) ? fs.writeFileAsync(file, jsonData) : Promise.resolve(true);}Promise.all([maybeWrite(condition, file, jsonData),functionA()]).then(function(){     // here 'functionA' was called, 'writeFileAsync' was maybe called})或者,如果您只想functionA在文件写入之后调用,则可以分开:maybeWrite(condition, file, jsonData).then(function(){     // here file may have been written, you can call 'functionA'     return functionA();})
打开App,查看更多内容
随时随地看视频慕课网APP