writeStream 完成后如何做某事?
How to do something once writeStream is done?
需要 return 一个 zip 文件下载并解压缩后的对象。
示例代码:
return rp(distantFile)
.pipe(fs.createWriteStream("./temp/" + zipName))
.on('close', async function () {
console.log('File written!');
try {
// Extraction
await extract("./temp/" + zipName,
{ dir: "./public/subs/" + name },
async function (err) {
// extraction is complete. make sure to handle the err
if (err) console.log(err)
console.log("Extraction done!");
// Remove .zip in /temp once extracted
await rimraf('./temp/' + zipName,
{ disableGlob: true },
function(){
/* do nothing */
});
const movieSubs = {
language: lang,
directory: "/subs/" + name + "/" + name + '.vtt'
};
return movieSubs;
})
}
catch(ex) {
console.log(err)
}
})
在 console.log(movieSubs)
上,它向我展示了一个具有大量属性的流对象。所以好像writeStream还没有关闭。
更喜欢用 axios 来做,但不知道怎么做。
我假设 lang
和 name
在 rp()
的范围内,如果是的话:
尝试将其包装在一个承诺中:
/* with name and lang in scope */
function test(name, lang){
return new Promise((resolve, reject) =>
rp(distantFile)
.pipe(fs.createWriteStream("./temp/" + zipName))
.on('close', async function () {
...
const movieSubs = {
language: lang,
directory: "/subs/" + name + "/" + name + '.vtt'
};
resolve(movieSubs);
}
);
}
test().then(val => console.log('MOVIE_SUBS: ', val));
需要 return 一个 zip 文件下载并解压缩后的对象。
示例代码:
return rp(distantFile)
.pipe(fs.createWriteStream("./temp/" + zipName))
.on('close', async function () {
console.log('File written!');
try {
// Extraction
await extract("./temp/" + zipName,
{ dir: "./public/subs/" + name },
async function (err) {
// extraction is complete. make sure to handle the err
if (err) console.log(err)
console.log("Extraction done!");
// Remove .zip in /temp once extracted
await rimraf('./temp/' + zipName,
{ disableGlob: true },
function(){
/* do nothing */
});
const movieSubs = {
language: lang,
directory: "/subs/" + name + "/" + name + '.vtt'
};
return movieSubs;
})
}
catch(ex) {
console.log(err)
}
})
在 console.log(movieSubs)
上,它向我展示了一个具有大量属性的流对象。所以好像writeStream还没有关闭。
更喜欢用 axios 来做,但不知道怎么做。
我假设 lang
和 name
在 rp()
的范围内,如果是的话:
尝试将其包装在一个承诺中:
/* with name and lang in scope */
function test(name, lang){
return new Promise((resolve, reject) =>
rp(distantFile)
.pipe(fs.createWriteStream("./temp/" + zipName))
.on('close', async function () {
...
const movieSubs = {
language: lang,
directory: "/subs/" + name + "/" + name + '.vtt'
};
resolve(movieSubs);
}
);
}
test().then(val => console.log('MOVIE_SUBS: ', val));