我熟悉异步执行的优势,并且知道如何使用回调。不过,出于某些原因,我希望以同步方式执行代码的某些部分。例如,
http.get()
和child_process.exec()
。
请注意,上面提到的两个示例都必须与事件侦听器 (
on(...)
) 一起使用,以便收集结果并处理错误。
任何能够阐明这一问题的机会。 一个小片段会很棒(例如,同步
http.get()
及其均匀处理)
谢谢。
更新:我可以使用
httpsync
来生成请求并捕获响应。响应本身是 buffer
。我正在使用 httysync
检索一些图像,但是当将缓冲区写入文件时(使用 fs.writeFile
),图像无法打开。我猜这与文件的某些转换有关。因此,如果有人可以帮助解决这一问题,那么问题就解决了。
附上一个片段
var httpsync = require("httpsync");
var fs = require("fs");
var req = httpsync.get({ url : "http://www.tunisia-live.net/wp-content/uploads/2011/12/christmas-tree-wallpaper1024x768.jpg" });
var res = req.end();
fs.writeFile("out.jpg", res.data, function(err) {
if (err)
console.log(err);
});
httpsync
现已弃用。我最近编写了一个名为 sync-request-curl 的库,假设您出于任何原因想要避免 async
/await
,它可能能够帮助处理同步 HTTP 请求。
该库包含原始 sync-request 中功能的子集,但利用 node-libcurl 在 NodeJS 中获得更好的性能。
以下是一个基本示例:
// import request from 'sync-request-curl';
const request = require('sync-request-curl');
const response = request('GET', 'https://ipinfo.io/json');
console.log('Status Code:', response.statusCode);
console.log('body:', response.body.toString());
对于您的情况,当同步编写时,我们将有
const fs = require('fs');
const request = require('sync-request');
const response = request(
'GET',
'http://www.tunisia-live.net/wp-content/uploads/2011/12/christmas-tree-wallpaper1024x768.jpg'
);
if (response.statusCode === 200) {
fs.writeFileSync('out.jpg', response.body);
console.log('Image saved successfully.');
} else {
console.error(`Failed to download the image. Status code: ${response.statusCode}`);
}
希望这有帮助:)。