2015-09-06 128 views
0

我今天想知道我是否不能簡單地支持回調和承諾。你能想到有什麼缺點嗎?NodeJS承諾與回調:是否有理由不支持兩者?

function fetchUser(data, success, error) { 
    var deferred = Q.defer(); 

    var body = { 
     sharedSecret: config['apiSharedSecret'], 
     deviceAuth: data.deviceAuth, 
     username: data.username, 
     phoneNumber: data.phoneNumber 
    }; 

    request.post({ 
     url: url, 
     json: body, 
    }, function (err, httpResponse, body) { 
     if (err) { 
      deferred.reject(new Error(err)); 
      if (typeof error === "function") { 
       error.call(this, err); 
      } 
      return; 
     }    

     if (typeof success === "function") { 
      success.call(this, body); 
     } 

     deferred.resolve(body); 
    }); 

    return deferred.promise; 
} 
+3

只是教育你的用戶接受承諾:-)不再需要回調參數。 – Bergi

+0

請記住promises也是回調,但它們比plain回調有更多的功能和功能,特別是當涉及異步錯誤傳播和管理多個異步操作時。所以,你的問題更像是爲什麼你應該支持回調的形式,如果具有更多功能的回調現在被認爲是一個標準,那麼回調的功能會減少很多。 – jfriend00

回答

1

缺點是它可以讓你的代碼更加複雜。此外,回調沒有優於承諾的情況,所以這樣做沒有意義。但如果你想這樣做,你應該寫一個這樣的函數來避免代碼重複。

function defer(success, error) { 
    var deferred = Q.defer(); 
    deferred.promise.then(success, error); 
    return deferred; 
} 
+0

Promise使代碼更清晰(最近我發現了代碼優化向前邁進的生成器),但是在任何情況下都不容易調試回調嗎? – Guy

+0

我想不出任何這種情況。你有一個例子嗎? – SpiderPig