我一直在等待代码的一部分完成后才能运行另一部分的问题, 第1部分如何在第2部分之前完成?
var uidArray = [];
// Part 1
admin.auth().listUsers(1000).then(result => {
result.users.forEach(userRecord => {
uidArray.push(userRecord.uid);
console.log("pushing to uid array user " + userRecord.uid);
});
return;
}).catch(error => {
console.log("Error listing users:" + error);
});
uidArray.forEach(uid => {
// Part 2 of the code
});
答案 0 :(得分:1)
您可以使用async-await进行更好的数据操作。但是,默认情况下,forEach是异步的,它不能等到每个完成都可以在下面使用带有try-catch块的async-await来使用。
try{
var uidArray = [];
const result = await admin.auth().listUsers(1000);
for(const userRecord of result.users) {
uidArray.push(userRecord.uid);
console.log("pushing to uid array user " + userRecord.uid);
}
uidArray.forEach(uid => {
// Part 2 of the code
});
} catch(err) {
console.log(err);
}
答案 1 :(得分:0)
var uidArray = [];
// Part 1
admin.auth().listUsers(1000).then(result => {
result.users.forEach(userRecord => {
uidArray.push(userRecord.uid);
console.log("pushing to uid array user " + userRecord.uid);
});
return;
}).catch(error => {
console.log("Error listing users:" + error);
}).then(()=>{
uidArray.forEach(uid => {
// Part 2 of the code
});
});
此处的关键是,您在开始诺言之后,可以保持then
兑现诺言。理想情况下,您还应该在每个步骤之后返回一个承诺,但这不是必需的。
此链接具有更多信息
答案 2 :(得分:0)
您可以在下面的代码中使用 async-await
,因为它对数据操作非常有用。我更喜欢for loop
而不是forEach
。
async function test(){
try{
let result = await admin.auth().listUsers(1000);
let usersArray = result.users;
var uidArray = usersArray.map(function(item) { return item.uid; });
// here you can loop through uidArrar either for or forEach whatever you want
for(let i =0 ; i< uidArray.length; i++){
// your code to be executed in second part
}
} catch (e) {
//error
}
}
test()