readConfig(path [, callback(err, config)])这里的回调是可选的。如果调用时没有回调,函数将只使用同步方法(返回promises的readFile(path)和configParser(string) )读取文件并直接返回解析后的配置对象。异常是直接抛出的。
有许多类似的代码来做同步和异步工作,所以我想使用一种方法来做这两种工作。promise之类的函数如何根据调用者的回调参数检测异步或同步调用?我们如何确保promise将以同步的方式运行?请给我看一下那个的式样。
发布于 2014-01-19 10:47:22
我不能说promise是以同步的方式运行的,但在JavaScript中,您可以使用arguments.length来获取传递给函数的参数数量。如果它等于2和typeof arguments[1] === 'function',那么你有第二个参数,它是一个函数。
至于个人品味,我建议只有两个不同的功能,其中一个以Sync结尾,àla http://nodejs.org/api/fs.html。这个模块充满了函数对,其中一个是异步的,另一个不是。
另外,请记住这不是异步代码:
function notAsync(cb) {
  cb(null)
}该回调在相同的节拍中执行。你需要把它包装成这样:
function async(cb) {
  process.nextTick(function(){ cb(null)})
}或者类似的东西。
无论你做什么决定,祝你编码愉快。
发布于 2014-01-19 10:47:42
在本例中,我使用的是jQuery的延迟api。我将回调封装在.when中,它允许您将.then()附加到回调,无论它是同步的还是带有promise的异步的。
解决方案应该是使用promise api的when。http://howtonode.org/promises
$('#sync').click(function() {
  foo(function() {
  });
});
$('#async').click(function() {
  foo(function() {
    var deferred = new $.Deferred();
    setTimeout(function() {
      deferred.resolve();
    }, 500);
    return deferred.promise();
  });
});
function foo(callback) {
  $.when(callback()).then(function() {
    console.log('done!');
  });
}https://stackoverflow.com/questions/21212570
复制相似问题