angularjs - Halt javascript execution until promise is resolved -


i have specific use case in test code want fetch tables headers (async) , dynamically create getters on javascript object. syntax use in test antennetable.row(0).getazimut();. problem having antennetable.row(0); returns promise , getazimut not yet defined on object.

i know how fix if use antennetable.row(0).then() keep syntax.

thanks in advance

this code :

row.js

'use strict';  var row = function (row, classes) { var outer = this;     function camelcase(input) {         return input.tolowercase().replace(/-(.)/g, function(match, group1) {             return group1.touppercase();     })}      for(var =0 ; i< classes.length; ++){         var methodname = camelcase("get-"+classes[i]);         (function(index) {             outer[methodname] = function () {                 return row.all(by.tagname('td')).get(index).gettext();             }         })(i);     }  };  module.exports = row; 

table.js

'use strict'; var row = require('./row.js');  var table = function (tableelement) {     var headelement = tableelement.element(by.css('thead'));     var bodyelement = tableelement.element(by.css('tbody'));      this.row = function (index) {         return headelement.all(by.css('th')).map(function (th) {             return th.getattribute('class');         }).then(function (clazzes) {             var rows = bodyelement.all(by.css('tr'));             return new row(rows.get(index), clazzes);         })     }; };  module.exports = table; 

mytestclass.js

'use strict';  describe('dossier map', function(){     var mainpage = require('../../pages/mainpage.js');     var dossierdetailpage = require('../../pages/dossier/dossier-detail.js');     var table = require('../../pages/table.js');     var dossierdetailpage = new dossierdetailpage();      aftereach(function() {         resetdata();         mainpage.logout();     });       it('antenne details popup verschijnt', function() {         // todo activate test in firefox , ie         if (!browser.isfirefox && !browser.isie) {             mainpage.goto('admin', 'admin');             mainpage.dossiers().byindex(7).opendetail();             dossierdetailpage.zoomout(5);              var popoverelement = element(by.css('#popover .popover'));             browser.driver.wait(function() {                 return popoverelement.ispresent().then(function(isdisplayed){                     if (isdisplayed) {                         return true;                     }                     else {                         dossierdetailpage.klikopantennecluster(11);                         return false;                     }                 });             });             var antennetable = new table(popoverelement.element(by.css('table')));              expect(antennetable.row(0).getazimut()).tobe('115');            }     }, 120000);   }); 

async/await

there's library called async/await (inspired c# version 5)

this makes promisable code look , feel synchronized

e.g.

var q = require("q"); var async = require('asyncawait/async'); var await = require('asyncawait/await');  function delay(millis) {     var deferred = q.defer();     settimeout(deferred.resolve, millis);     return deferred.promise; }  async(function () {     console.log('message 1');     await(delay(100));     console.log('message 2'); })(); 
  • must hosted on nodejs environment
  • awesome coding user experience

Comments

Popular posts from this blog

How to connect android app to App engine -

gcc - MinGW's ld cannot perform PE operations on non PE output file -

php - display validation error message next to the textbox in codeigniter -