如何设计可以有同步或异步响应的API

How to design API that can have either synchronous or asynchronous response

我需要我的服务层支持在应用程序在线时发出 http 请求,并在应用程序离线时保存请求以供稍后使用,但这会导致响应在应用程序在线时成为承诺,或者应用程序离线时同步的东西。我目前有

someService.save(data).then(function(response) {
    performSomeAction();
});

但是someService的实现会变成

if (isOnline()) {
    return http.post()
} else {
    cachePostForLater();
}

从服务中 return 尝试隐藏控制器层在线/离线保存的复杂性的最佳做法是什么?

您的同步函数应该 return 您手动解决的承诺。这样,调用 api 服务的代码就可以不知道调用是否在线进行。 如果您将 $q 作为服务的依赖项,您可以执行

function save(){
   if (isOnline()) {
    return http.post()
   } else {
    cachePostForLater();
    return $q.resolve(null);
   }
}