作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从下面的代码中得到了一系列的 promise ,但我发现很难将数据放入另一个数组中,以便我可以在其他函数中使用该数组。
var AdidToCheckInDelete = [];
var getArray = function() {
var result = element.all(by.repeater('adId in campaign.adIds')).map(function (elem) {
return elem.all(by.model('campaign.adIds[$index]')).getAttribute('value').then(function (text) {
return text ? text[0] : text;
});
});
result.then(function (elem) {
console.log('element is' + elem);
var array = elem;
AdidToCheckInDelete.push(array);
console.log('array created with values + AdidToCheckInDelete);
});
console.log('Array outside the scope is' +AdidToCheckInDelete);
//PROBLEM AdidToCheckInDelete is Empty
};
将数组的值压入并在范围内打印它们会给出数组,但在范围外打印它会给出一个空数组。请为我提供解决方案。提前致谢...
最佳答案
数组为空的原因是 Protractor 正在执行您的 console.log() 语句,甚至在 map() 函数的 promise 被解析为您的 < strong>push() 方法是链接的。要解决此问题,请尝试在 promise 解决后控制台记录您的数组,在您的情况下,它在推送方法之后已经完成 array 变量。
result.then(function (elem) {
console.log('element is' + elem);
var array = elem;
AdidToCheckInDelete.push(array);
//Printing array here makes sense as map() function promise is resolved and then you are trying to print it
console.log('array created with values + AdidToCheckInDelete);
});
或者您可以将控制台日志记录链接到包含推送方法的函数旁边。以下是您可以做到的方法 -
result.then(function (elem) {
console.log('element is' + elem);
var array = elem;
AdidToCheckInDelete.push(array);
})
.then(function(){
console.log('Array outside the scope is' +AdidToCheckInDelete);
//Your array wont be empty now
//If you want to use your array for next operation you can do it here
});
您还可以尝试添加阻塞 defer() ->fulfill() 机制,使其等待/阻塞,直到 promise 得到解决,请参阅:
- Prevent Protractor from finishing before promise has been resolved
关于javascript - Protractor - 如何将 Promise 数组的结果获取到另一个数组中并在其他函数中使用该数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32168317/
我是一名优秀的程序员,十分优秀!