我有一个 javascript 应用程序将所有数据保存在服务器上,然后使用 REST API 通信服务器和客户端。
它们工作正常,直到我们开始有越来越多的嵌套异步调用或隐藏异步调用的嵌套同步调用。例如:
function asyncFoo(callback) {
callback();
}
function syncCallHidingAsyncCall(){
syncStuff();
asyncFoo(function(){
syncFoo()
});
}
function nestedAsyncCall(callback){
asyncFoo(function(){
anotherAsyncCall(callback);
})
}
// this make refactor code become so hard.
// if we want add step2() after nestedAsyncCall();
// instead of add one line of code
// we need first add callback param in every asyncCall, then pass step2 as a callback
还有一些不必要的异步调用:
// we actually only verify this once.
function isLogin(callback){
if (!App._user) {
ServerApi.getCurUser(function(data){
App._user = data.user;
callback(App._user)
});
}
callback(App._user)
}
function syncCallNeedVerfifyLogin(callback){
// user only need login once, so in most case this is really only a sync call.
// but now I have to involve a unnecessary callback to get the return value
isLogin(function(){
callback(syncStuff())
})
}
所以随着项目越来越大,我们就开始忘记了他们的关系,哪个需要等待,哪个会变魔术。越来越多的功能变得异步只是因为一些非常小的东西需要在服务器上进行验证。
所以我开始觉得他们一定是这个项目中的一些设计问题。我正在寻找最佳实践或设计模式,或者在这种繁重的通信应用程序中需要遵循一些规则。
感谢帮助。