如何避免条件表达式中coffeescript中的隐式"返回"?

sta*_*tic 12 javascript node.js promise coffeescript deferred

我正在实现一个具有延迟值的函数来返回,并且在函数中我有许多嵌套的条件表达式:

例如:

deferred = Q.defer()
FS.readFile("foo.txt", "utf-8", (error, text) ->
    if error
      deferred.reject(new Error(error))
    else
      deferred.resolve(text)
)
return deferred.promise
Run Code Online (Sandbox Code Playgroud)

这将编译成:

var deferred;

deferred = Q.defer();

FS.readFile("foo.txt", "utf-8", function(error, text) {
  if (error) {
    --> return <-- deferred.reject(new Error(error));
  } else {
    --> return <-- deferred.resolve(text);
  }
});

return deferred.promise;
Run Code Online (Sandbox Code Playgroud)

我只需要最后一次返回,但不需要if/else返回(即- >在编译代码中返回< -)

如何避免coffeescript编译器的这种行为(不需要它们的隐式返回)?

log*_*yth 12

Coffeescript会自动返回最后一个表达式的结果,因此如果您不希望它返回结果,if那么您需要添加另一个表达式.在这种情况下,只需添加return.

FS.readFile "foo.txt", "utf-8", (error, text) ->
  if error
    deferred.reject new Error(error)
  else
    deferred.resolve text
  return
Run Code Online (Sandbox Code Playgroud)

此外,error已经是一个Error对象,所以你可以直接拒绝它.

deferred.reject(error)
Run Code Online (Sandbox Code Playgroud)