gpt4 book ai didi

javascript - 递归函数的回调

转载 作者:行者123 更新时间:2023-11-30 11:48:05 25 4
gpt4 key购买 nike

以下代码用于从我们的 Web 应用程序中获取 .zip 文件。该文件是通过安全关闭另一个应用程序然后压缩生成的,最后将其发送以供下载。

var dl = function() {
request({
method: 'GET',
uri: 'some_url',
headers: {
'User-Agent': 'Scripted-Download'
},
encoding: null,
jar: true
}, function(err, res, body) {
if (err) throw(err)
if (res.headers['content-type'] === 'application/zip;charset=utf-8') {
process.stdout.write('\rDownloading file ..')
var id = uuid.v4()
, file = path.resolve(__dirname, '../../' + id + '.zip')
fs.writeFile(file, body, function(err) {
if (err) throw(err)
process.stdout.write('\rFile downloaded ' + id + '.zip')
process.exit(0)
})
} else {
process.stdout.write('\rAwaiting file ..')
setTimeout(dl(), 30 * 1000)
}
})
}

这按预期工作。但是,我需要从另一个脚本中使用它。所以上面的代码返回下载文件的 id,然后我可以从另一个脚本中提取 .zip 并将提取的文件放入具有相同 的目录中编号。然后可以下载这些文件。

编辑 本质上,我需要执行此脚本,在下载时提取内容,然后在完成前两个步骤后使用 res.render() 加载 UI。这需要使用 id 来完成,这样两个用户就不会创建冲突的文件。

最佳答案

正如评论中提到的,promises 应该使这变得容易。首先 promise 您需要的异步功能:

function makeRequest(parameters) {
return new Promise(function (resolve, reject) {
request(parameters, function (err, res, body) {
if (err) { reject (err); }
else { resolve({ res: res, body: body }); }
});
});
}

function writeFile(file, body) {
return new Promise(function (resolve, reject) {
fs.writeFile(file, body, function(err) {
if (err) { reject(err); }
else { resolve(); }
});
});
}

function timeout(duration) {
return new Promise(function (resolve) {
setTimeout(resolve, duration);
});
}

然后使用它们。

var dl = function () {
return makeRequest({
method: 'GET',
uri: 'some_url',
headers: {
'User-Agent': 'Scripted-Download'
},
encoding: null,
jar: true
}).then(function (result) {
if (result.res.headers['content-type'] === 'application/zip;charset=utf-8') {
process.stdout.write('\rDownloading file ..')
var id = uuid.v4()
, file = path.resolve(__dirname, '../../' + id + '.zip');

return writeFile(file, result.body)
.then(function () { return id; });
} else {
process.stdout.write('\rAwaiting file ..');

return timeout(30 * 1000).then(dl);
}
});
}

dl().then(function (id) { process.stdout.write('\rid is: ' + id); });

关于javascript - 递归函数的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40258175/

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