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

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

本文关键字:异步 响应 API 同步      更新时间:2023-09-26

我需要我的服务层支持在应用程序在线时发出http请求,并在应用程序离线时保存请求,然而这导致响应要么是应用程序在线时的承诺,要么是应用程序离线时的同步。我现在有

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

然而someService的实现将变成

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

从控制器层尝试隐藏在线/离线保存的复杂性,从服务返回的最好的东西是什么?

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

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