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