gpt4 book ai didi

javascript - 如何使一些同步代码在其他异步代码之前运行?

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:28 24 4
gpt4 key购买 nike

我有一个这样的函数:

var download = function(url, name) {

http.get(url, function(response) {
// part1 : create a new folder if it doesn't exist
dir = './name';
if (!fs.existsSync(dir)){
fs.mkdirSync(dir);
}
// part 2: download and save file into that folder
response.on('data', function (data) {
fs.appendFileSync(dir, data);
});
})
}

我希望第 1 部分在第 2 部分运行之前完成(这样我就可以获得第 2 部分的目录)。我怎样才能做到这一点 ?

(在上面的代码中,据我所知(我是 Node.js 的新手),两个部分将同时运行,所以我不确定第 1 部分总是会在第 2 部分运行之前完成)。

最佳答案

both parts will run simultaneously

不,他们不会。 existsSyncmkdirSync 正在阻塞调用。因此,只有在执行它们之后,才会附加事件处理程序。

但是,只要适用,我们就应该利用异步性。在这种情况下,您可以使用 existsmkdir 异步对应项。

所以,你的代码可以像这样松散地重构

function download(url, name) {

function attachAppender(filename, response) {
response.on('data', function (data) {
fs.appendFile(filename, function (err) {
res.statusCode = err ? 500 : 200;
response.end();
});
});
}

http.get(url, function (response) {
var dir = './name';
fs.exists(dir, function (exists) {
if (!exists) {
fs.mkdir(dir, function (err) {
if (err) {
res.statusCode = 500;
res.end();
} else {
// pass the actual full file name
attachAppender(filename, response);
}
});
} else {
attachAppender(filename, response);
}
});
});
}

注意: fs.exists 已弃用,可能很快就会被删除。最好使用 fs.stat 而不是它。

关于javascript - 如何使一些同步代码在其他异步代码之前运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com