我正在尝试打开下面列表中的每个链接,并尝试在页面加载后执行一些操作。
流程应该像
- 打开链接
- 做一些动作
- 打开列表中的下一个链接
- 做一些动作
- 移动到列表中的下一个链接
我有下面的代码。它没有打开第一个链接,而是直接跳到第二个链接并执行操作。我对Js Async不太了解。
非常感谢你在这方面的帮助!
let lst = ["https://twitter.com/pinsky", "https://twitter.com/adamiqshan"]
lst.forEach( link => {
setTimeout(openLink(link), 5000)
})
function openLink(URL){
window.open(URL, "_self")
}
用promise包装您的工作代码。如果你完成了你的工作,就兑现承诺。
构建一个承诺链/堆栈并执行它
let lst = ["https://twitter.com/pinsky", "https://twitter.com/adamiqshan"]
let wrapper = lst.map((url) => {
return () => {
return new Promise((resolve) => {
// do your work here
// when your are done, call resolve()
// so the next url will be proceeded
console.log("proceed", url);
setTimeout(resolve, 5000);
});
};
});
// create promise stack
wrapper.reduce((prev, cur) => {
return prev.then(cur);
}, Promise.resolve());