2013-10-02 55 views

回答

2

看樣子serveFile回報「承諾」(雖然它不是一個承諾,它是EventEmitter的情況下),所以你可以聽上的error事件(當文件不存在,將火):

Server.prototype.serveFile = function (pathname, status, headers, req, res) { 
    var that = this; 
    var promise = new(events.EventEmitter); 

    pathname = this.resolve(pathname); 

    fs.stat(pathname, function (e, stat) { 
     if (e) { 
      return promise.emit('error', e); 
     } 
     that.respond(null, status, headers, [pathname], stat, req, res, function (status, headers) { 
      that.finish(status, headers, req, res, promise); 
     }); 
    }); 
    return promise; 
}; 

如果文件成功送達,finish方法被調用,同樣的「承諾」對象將傳入。它會發出success事件:

Server.prototype.finish = function (status, headers, req, res, promise, callback) { 
    // ... 

    if (!status || status >= 400) { 
     // ... 
    } else { 
     // ... 
     promise.emit('success', result); 
    } 
}; 

所以,你可以做這樣的事情:

var promise = fileServer.serveFile('/error.html', 500, {}, request, response); 
promise.on("success", function() { 
    // It worked! 
}); 
+0

而對於錯誤我想,'promise.on( 「錯誤」,函數(ERR){} )'會工作。我對嗎? –

+0

@Johnツ - 確實。 –

相關問題