NodeJS - 同步 http.request 或 child_process.exec

问题描述 投票:0回答:1

我熟悉异步执行的优势,并且知道如何使用回调。不过,出于某些原因,我希望以同步方式执行代码的某些部分。例如,

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);
});
javascript node.js synchronization
1个回答
0
投票

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}`);
}

希望这有帮助:)。

© www.soinside.com 2019 - 2024. All rights reserved.