gpt4 book ai didi

javascript - Protractor - 如何将 Promise 数组的结果获取到另一个数组中并在其他函数中使用该数组

转载 作者:行者123 更新时间:2023-11-27 23:57:12 25 4
gpt4 key购买 nike

我从下面的代码中得到了一系列的 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() 语句,甚至在 ma​​p() 函数的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com