Convert a stream to Promise
I need to collect all the data from the stream and resolve it as promise.
I created this stream:
class CollectToPromise extends Writable {
constructor(options) {
super();
this._result = ""
this.result = new Promise((resolve, reject) => {
this.on('finish', resolve):w
this.on('error', reject)
}).then(() => this._result)
}
_write(chunk, encoding, callback) {
this._result += chunk
callback()
}
_writev(chunks, callback) {
chunks.forEach(c => {
this._result += chunk
})
callback()
}
asPromise() {
return this.result
}
}
and I use it like this:
var r = fs.createReadStream('secrets');
const c = new CollectToPromise()
const encrypt = crypto.createCipher(algorithm, password);
r.pipe(encrypt).pipe(c).asPromise().then((res) => console.log(res)
My questions are:
- What do you think about the solution, including the naming?
- How can I avoid the warning:
(node:32386) Warning: Use Cipheriv for counter mode of aes-256-ctr?
javascript node.js stream
add a comment |
I need to collect all the data from the stream and resolve it as promise.
I created this stream:
class CollectToPromise extends Writable {
constructor(options) {
super();
this._result = ""
this.result = new Promise((resolve, reject) => {
this.on('finish', resolve):w
this.on('error', reject)
}).then(() => this._result)
}
_write(chunk, encoding, callback) {
this._result += chunk
callback()
}
_writev(chunks, callback) {
chunks.forEach(c => {
this._result += chunk
})
callback()
}
asPromise() {
return this.result
}
}
and I use it like this:
var r = fs.createReadStream('secrets');
const c = new CollectToPromise()
const encrypt = crypto.createCipher(algorithm, password);
r.pipe(encrypt).pipe(c).asPromise().then((res) => console.log(res)
My questions are:
- What do you think about the solution, including the naming?
- How can I avoid the warning:
(node:32386) Warning: Use Cipheriv for counter mode of aes-256-ctr?
javascript node.js stream
asPromisecan be problematic depending on how you implement it. If you create the promise beforeasPromiseis called, and if you reject that Promise due to an error occuring in th stream, then you can get a unhandled promise rejection warning if your code does not use.asPromiseat all, and that waring will result in a real error in future that will exit the application.
– t.niese
Dec 6 at 12:23
>then you can get a unhandled promise rejection warning if your code does not use it's probably a downside of using any promise
– kharandziuk
Dec 6 at 12:43
1
Tha namingasPromiseimplies that this Promise is created on demand whenasPromiseis called. And not that it already exist before that call. So writing onlyr.pipe(encrypt).pipe(c);should at least not result in a unhandled promise rejection warning. Just because it would break the expectation.
– t.niese
Dec 6 at 12:50
Ok, now I see your point, thx
– kharandziuk
Dec 6 at 12:53
add a comment |
I need to collect all the data from the stream and resolve it as promise.
I created this stream:
class CollectToPromise extends Writable {
constructor(options) {
super();
this._result = ""
this.result = new Promise((resolve, reject) => {
this.on('finish', resolve):w
this.on('error', reject)
}).then(() => this._result)
}
_write(chunk, encoding, callback) {
this._result += chunk
callback()
}
_writev(chunks, callback) {
chunks.forEach(c => {
this._result += chunk
})
callback()
}
asPromise() {
return this.result
}
}
and I use it like this:
var r = fs.createReadStream('secrets');
const c = new CollectToPromise()
const encrypt = crypto.createCipher(algorithm, password);
r.pipe(encrypt).pipe(c).asPromise().then((res) => console.log(res)
My questions are:
- What do you think about the solution, including the naming?
- How can I avoid the warning:
(node:32386) Warning: Use Cipheriv for counter mode of aes-256-ctr?
javascript node.js stream
I need to collect all the data from the stream and resolve it as promise.
I created this stream:
class CollectToPromise extends Writable {
constructor(options) {
super();
this._result = ""
this.result = new Promise((resolve, reject) => {
this.on('finish', resolve):w
this.on('error', reject)
}).then(() => this._result)
}
_write(chunk, encoding, callback) {
this._result += chunk
callback()
}
_writev(chunks, callback) {
chunks.forEach(c => {
this._result += chunk
})
callback()
}
asPromise() {
return this.result
}
}
and I use it like this:
var r = fs.createReadStream('secrets');
const c = new CollectToPromise()
const encrypt = crypto.createCipher(algorithm, password);
r.pipe(encrypt).pipe(c).asPromise().then((res) => console.log(res)
My questions are:
- What do you think about the solution, including the naming?
- How can I avoid the warning:
(node:32386) Warning: Use Cipheriv for counter mode of aes-256-ctr?
javascript node.js stream
javascript node.js stream
edited 8 mins ago
Jamal♦
30.2k11116226
30.2k11116226
asked Dec 6 at 11:15
kharandziuk
4371316
4371316
asPromisecan be problematic depending on how you implement it. If you create the promise beforeasPromiseis called, and if you reject that Promise due to an error occuring in th stream, then you can get a unhandled promise rejection warning if your code does not use.asPromiseat all, and that waring will result in a real error in future that will exit the application.
– t.niese
Dec 6 at 12:23
>then you can get a unhandled promise rejection warning if your code does not use it's probably a downside of using any promise
– kharandziuk
Dec 6 at 12:43
1
Tha namingasPromiseimplies that this Promise is created on demand whenasPromiseis called. And not that it already exist before that call. So writing onlyr.pipe(encrypt).pipe(c);should at least not result in a unhandled promise rejection warning. Just because it would break the expectation.
– t.niese
Dec 6 at 12:50
Ok, now I see your point, thx
– kharandziuk
Dec 6 at 12:53
add a comment |
asPromisecan be problematic depending on how you implement it. If you create the promise beforeasPromiseis called, and if you reject that Promise due to an error occuring in th stream, then you can get a unhandled promise rejection warning if your code does not use.asPromiseat all, and that waring will result in a real error in future that will exit the application.
– t.niese
Dec 6 at 12:23
>then you can get a unhandled promise rejection warning if your code does not use it's probably a downside of using any promise
– kharandziuk
Dec 6 at 12:43
1
Tha namingasPromiseimplies that this Promise is created on demand whenasPromiseis called. And not that it already exist before that call. So writing onlyr.pipe(encrypt).pipe(c);should at least not result in a unhandled promise rejection warning. Just because it would break the expectation.
– t.niese
Dec 6 at 12:50
Ok, now I see your point, thx
– kharandziuk
Dec 6 at 12:53
asPromise can be problematic depending on how you implement it. If you create the promise before asPromise is called, and if you reject that Promise due to an error occuring in th stream, then you can get a unhandled promise rejection warning if your code does not use .asPromise at all, and that waring will result in a real error in future that will exit the application.– t.niese
Dec 6 at 12:23
asPromise can be problematic depending on how you implement it. If you create the promise before asPromise is called, and if you reject that Promise due to an error occuring in th stream, then you can get a unhandled promise rejection warning if your code does not use .asPromise at all, and that waring will result in a real error in future that will exit the application.– t.niese
Dec 6 at 12:23
>then you can get a unhandled promise rejection warning if your code does not use it's probably a downside of using any promise
– kharandziuk
Dec 6 at 12:43
>then you can get a unhandled promise rejection warning if your code does not use it's probably a downside of using any promise
– kharandziuk
Dec 6 at 12:43
1
1
Tha naming
asPromise implies that this Promise is created on demand when asPromise is called. And not that it already exist before that call. So writing only r.pipe(encrypt).pipe(c); should at least not result in a unhandled promise rejection warning. Just because it would break the expectation.– t.niese
Dec 6 at 12:50
Tha naming
asPromise implies that this Promise is created on demand when asPromise is called. And not that it already exist before that call. So writing only r.pipe(encrypt).pipe(c); should at least not result in a unhandled promise rejection warning. Just because it would break the expectation.– t.niese
Dec 6 at 12:50
Ok, now I see your point, thx
– kharandziuk
Dec 6 at 12:53
Ok, now I see your point, thx
– kharandziuk
Dec 6 at 12:53
add a comment |
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209148%2fconvert-a-stream-to-promise%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f209148%2fconvert-a-stream-to-promise%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
asPromisecan be problematic depending on how you implement it. If you create the promise beforeasPromiseis called, and if you reject that Promise due to an error occuring in th stream, then you can get a unhandled promise rejection warning if your code does not use.asPromiseat all, and that waring will result in a real error in future that will exit the application.– t.niese
Dec 6 at 12:23
>then you can get a unhandled promise rejection warning if your code does not use it's probably a downside of using any promise
– kharandziuk
Dec 6 at 12:43
1
Tha naming
asPromiseimplies that this Promise is created on demand whenasPromiseis called. And not that it already exist before that call. So writing onlyr.pipe(encrypt).pipe(c);should at least not result in a unhandled promise rejection warning. Just because it would break the expectation.– t.niese
Dec 6 at 12:50
Ok, now I see your point, thx
– kharandziuk
Dec 6 at 12:53