如何回复承诺?

boo*_*oni 2 javascript promise angularjs

我正在写一个Angular应用程序.我需要方法getData()来始终返回一个promise.因此,如果从本地存储中检索数据并且它不为null,则应该将其作为promise返回,而不调用$ http.get part.

我怎么写呢?

getData() {
      var data = localStoradge.getItem('data');
      if (data == null) {
        return $http.get('url').then(function(response){
          data = response;
          return data
          })
        }
    }
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 12

如果数据已经可用,则返回已解决的promise(使用ES6语法):

function getData() {
    var data = localStorage.getItem('data');
    if (data == null) {
        return $http.get('url');
    } else {
        // return promise that is already resolved
        return Promise.resolve(data);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以始终使用该接口作为承诺数据是否已经可用.

注意:由于您在.then()处理程序中所做的只是返回数据,因此您可以完全删除它.


或者,使用$ q Angular语法,它看起来像这样:

function getData() {
    var data = localStorage.getItem('data');
    if (data == null) {
        return $http.get('url');
    } else {
        // return promise that is already resolved
        return $q.resolve(data);
    }
}
Run Code Online (Sandbox Code Playgroud)