2017-02-14 8 views
0

Это скорее проблема JavaScript, но это то, что пытается быть реализовано для использования теста Protractor.Функция транспортира не возвращается?

//fileA.js 
element(by.id('page-element').getText().then(function() { 
    var currentPremium = fileB.getSixMonthPremium(); // calls the function in fileB.js 

    element(by.id('page-element').getText().then(function() { 
     console.log(currentPremium); // prints undefined 
     fileB.compareValue(currentPremium, ..., ...,); 
    }); 
}); 


//fileB.js 
this.getSixMonthPremium() = function() { 
    element(by.id('full-premium').isDisplayed().then(function(displayed) { 
     if (displayed) { 
      element(by.id('full-premium').getText().then(function(currentPremium) { 
       console.log('Current Premium - ' + currentPremium); // prints string of $XXX.xx 
       return currentPremium; //seems to be returning undefined? 
      }); 
     } 
    }); 
}); 

При попытке использовать переменную currentPremium после того, как возвращается из вызова функции, это всегда не определено. Что я делаю не так?

ответ

1

Добро пожаловать на использование асинхронных вызовов с помощью Javascript!

вы хотите вернуть обещание от вызова getSixMonthPremium(), а затем продолжить работу после того, как этот звонок вернется.

this.getSixMonthPremium() = function() { 
    return new Promise(function(resolve,reject){ 
     element(by.id('full-premium').isDisplayed().then(function(displayed) { 
      if (displayed) { 
       element(by.id('full-premium').getText().then(function(currentPremium) { 
        console.log('Current Premium - ' + currentPremium); // prints string of $XXX.xx 
        resolve(currentPremium); //seems to be returning undefined? 
       }); 
      } 
     }); 
    }) 
}); 

тогда вы будете обрабатывать это обещание делать что-то вроде ниже:

fileB.getSixMonthPremium().then(function(premium){ 
    ...handle premium 
}); 
+0

Спасибо! Я знал, что это что-то похожее на асинхронное/обещание, но я не мог найти то, что мне нужно, в поисках Google. Мне нужно получить книгу JavaScript или найти хороший онлайн-материал :) – DrZoo