原文链接: do-sync 异步转同步 使用child_process实现
https://github.com/Zemnmez/do-sync
主要思想是动态创建js文件, 使用buffer传入到子线程, 同步使用node执行这个线程, 异步函数中不能使用log, 会导致json解析失败, 这个库主要是给macro用的, 所以输入输出格式有限制, 其实可以自己再封装下
const { doSync } = require("do-sync");
console.log(doSync);
const f = async () => {
await new Promise((r) => setTimeout(r, 1000));
};
const sf = doSync(f);
console.log("111", new Date());
sf();
console.log("222", new Date());
/*
[Function (anonymous)]
111 2021-02-24T15:33:28.469Z
222 2021-02-24T15:33:29.623Z
*/
同步下载例子
// https://juejin.cn/post/6844904052581466120
// https://zhuanlan.zhihu.com/p/64346538
const { execSync } = require("child_process");
const syncGet = (url) => {
const data = execSync(`curl -L ${url}`).toString();
if (data === "") {
throw new Error("empty data");
}
return data;
};
console.log(syncGet("http://www.baidu.com"));