Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Ember.Deferred promise - thenable" />
<meta charset=utf-8 />
<title>JS Bin</title>
  <!-- -->
<script src='http://code.jquery.com/jquery-1.10.0.min.js'></script>
<script src='https://rawgithub.com/wycats/handlebars.js/1.0.0/dist/handlebars.js'></script>
<script src='http://builds.emberjs.com.s3.amazonaws.com/ember-latest.js'></script>
<link href="//twitter.github.io/bootstrap/assets/css/bootstrap.css" rel="stylesheet" type="text/css" />
<script src="//twitter.github.io/bootstrap/assets/js/bootstrap.js"></script>
  <!-- -->
  
  <!-- 
<script src="http://localhost:9090/public/js/lib/jquery.js"></script>
<script src="http://localhost:9090/public/js/lib/handlebars.js"></script>
<script src="http://localhost:9090/public/js/lib/ember.js"></script>
<script src="http://localhost:9090/public/js/lib/ember-data.js"></script>
<link rel='stylesheet' href='http://localhost:9090/public/css/bootstrap.css' />
<script src='http://localhost:9090/public/js/lib/bootstrap.js'></script>  
  <!-- -->
</head>
<body>
  
  <script type='text/x-handlebars' data-template-name='application'>
    {{outlet}}
  </script>
  
  
</body>
</html>
 
App = Ember.Application.create({
  LOG_TRANSITIONS: true
});
App.ApplicationRoute = Ember.Route.extend({
  model: function(params) {
    var promise = Ember.Deferred.create();
    var successCallback = function(resp) {
      promise.resolve(resp);
    };
    
    var errorCallback = function(err) {
      promise.reject(err);
    };
    
    var thenable = promise.then(function(resp) {
      if (resp.isError) {
        throw new Error(resp.errorMessage);
      } else {
        return resp;
      }
    });
    
    // some api that takes a callback
    this.callApi(params, successCallback, errorCallback);
    return thenable;
  },
  callApi: function(data, successCallback, errorCallback) {
    /* */
    setTimeout(function() {
      successCallback({data: 'foo'});
    }, 200);
    /* */
    /* *  
    setTimeout(function() {
      successCallback({isError: true, errorMessage: 'Response data is wrong'});
    }, 200);
    /* */
    
    /* *
    setTimeout(function() {
      errorCallback('Incorrect use of API');
    }, 200);
    /* */
  },
  afterModel: function(model) {
    console.log('Model Hook returned - ', model);
  }
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
dsawardekarpro
0viewers