javascript - 当您无法修改异步函数时,Javascript 控制程序流程
问题描述
因此,我看到的所有关于 Promise 或回调的示例通常都涉及将回调注入到 setTimeout 内部的异步函数中或类似的东西中。但是,如果您有一个无论出于何种原因都无法修改的功能怎么办。也许它是从库中导入的,idk。想象一下这段代码。
const funcA = () => {
setTimeout(() =>console.log("first"), 500)
}
const funcB = () => {
console.log("second");
}
funcA();
funcB();
在不修改 funcA 的情况下,如何在第一个之后打印第二个?
解决方案
TLDR:放弃代码。
javascript 中的所有异步函数要么返回一个承诺,要么接受一个回调。自 2000 年代中期以来,这一直是 javascript 的文化。如果您遇到问题中的情况,最好的解决方案是不使用该库并查找其他内容。
解决方法..
但是,有时您需要执行此类操作。例如,如果您开发了一个混搭脚本,用户可以将其插入到他的 HTML 中,并且您无法控制用户如何复制/粘贴您的代码。
一种解决方法是使用setTimeout
或setInterval
监视某些内容以进行更改。这可以是变量、a <div>
、an<input>
等。这是一个等待jQuery
加载的愚蠢示例:
const funcB = () => {
console.log("second");
}
function waitForJQuery () {
if (window.jQuery || window.$) { // check if jQuery variable exist
console.log('jQuery loaded');
funcB();
}
else {
setTimeout(waitForJQuery, 200); // check 5 times per second
}
}
waitForJQuery();
通常你不会写这样的代码。但是如果并且只有当你别无选择时,你才能做这样的事情。
请注意,尽管这需要您等待产生副作用的任何内容:创建全局变量或修改全局变量或更新 DOM 等。
推荐阅读
- kubernetes - mountPath 在 Kubernetes 中应该是绝对的,是吗?
- android - 如何在 CardView 的标题中将 TextView 居中?
- python - 如何在不展平的情况下沿新轴或维度附加 numpy 数组
- java - 如何使以下类不可变?
- ruby - 接受用户输入并搜索数组
- html - 如果用户达到 id,如何更改标题颜色?HTML CSS
- reactjs - Enzyme and Jest:当 dropzone 组件是第三方模块时,如何模拟/测试 material-ui dropzone onChange 处理程序?
- php - 如何让用户在注册 Symfony 时决定他想要什么角色
- javascript - 如何修复搜索栏以使用 node.js 获取 SQL 数据
- python - 如何创建切片 CSV 文件的散点图矩阵?