写一个像Instagram一样的小Instagram。
它是如何工作的,我有一个对象,它是来自聊天的用户列表及其Instagram用户名。
所以我在这里有一小段代码,它遍历列表,获取每个用户名的最新媒体帖子,并继续检查,所有这些都在循环中。然而,我面临的问题是循环内部存在异步调用,并且循环保持迭代,但异步调用的结果稍后会出现。但是,这不是我想要的操作方式。有人能告诉我如何克服这一点,或者以异步方式做到这一点的正确方法吗?谢谢 下面是我的代码,还有一个注释,显示列表对象的格式,以防万一有人想知道。感谢
bot.on('/check', (msg) => {
list['12345'] = {username:'someguy', list:['@the.haider.ali']};
list['45678'] = {username:'someguy2', list:['@vishnuvayala']};
if(list.length != 0){
for(i in list){
var list2 = JSON.parse(JSON.stringify(list));
delete list2[i];
for(x in list2){
for(y in list2[x].list){
let checkis = list2[x].list[y]
console.log("Checking "+checkis);
getInstaID(checkis).then(function(userid){
return getMediaID(userid);
}).then(function(mediaid){
return getLikers(mediaid);
}).then(function(likers){
console.log("Last liker is "+likers[0].username);
});
console.log("Done checking "+checkis);
}
}
}
}
});
这是我得到的输出
Checking @the.haider.ali
Done checking @the.haider.ali
Checking @vishnuvayala
Done checking @vishnuvayala
Last liker is ghetto._boy
Last liker is dk.gayathri
答案 0 :(得分:1)
尝试使用异步等待。 await函数可以被await / promise阻塞,可以阻止数组迭代直到等待响应。
不要害怕等待表达。它只是阻止功能,直到同样众所周知的Promise将无法解决。
请检查它是否有效。
bot.on('/check', async function(msg){
list['12345'] = {username:'someguy', list:['@the.haider.ali']};
list['45678'] = {username:'someguy2', list:['@vishnuvayala']};
if(list.length != 0){
for(i in list){
var list2 = JSON.parse(JSON.stringify(list));
delete list2[i];
for(x in list2){
for(y in list2[x].list){
let checkis = list2[x].list[y]
console.log("Checking "+checkis);
var userid = await getInstaID(checkis);
var mediaid = await getMediaID(userid);
var likers = await getLikers(mediaid);
console.log("Last liker is "+likers[0].username);
console.log("Done checking "+checkis);
}
}
}
}
});
输出应该像
Checking 0
Last liker is likers: 0
Done checking 0
Checking 1
Last liker is likers: 1
Done checking 1
Checking 2
Last liker is likers: 2
Done checking 2