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)