Dies ist eine Funktion zum Bearbeiten einiger Bilder über graphicsmagick
in meiner Meteor-Anwendung.Meteor/JS: Wie man einen Callback vor einem anderen Callback durchführt
Wenn das Bild beschnitten wird, möchte ich prüfen, ob seine Breite> 900px ist. Dann sollte es auf 900px skaliert werden.
Diese komplette Funktion funktioniert nicht, da der Callback von gmread.size()
beendet werden muss, bevor die return gmread.stream
ausgeführt wird - was derzeit nicht der Fall ist. Aber ich weiß nicht, wie diese SYNCHRON/Asynchron Sache zum Laufen zu bringen ...
function imageManipulation(inputId, method) {
var inStream = Files.findOneStream({ _id: inputId }),
gmread;
// do some image manipulation depending on given `method`
if (method == 'crop') {
gmread = gm(inStream);
// check if image width > 900px, then do resize
gmread.size(function(err, size) {
if (size.width > 900) {
gmread = gmread.resize('900');
}
});
}
return gmread.stream('jpg', Meteor.bindEnvironment(function(err, stdout, stderr) {
stderr.pipe(process.stderr);
if (!err) {
var outStream = Files.upsertStream({ _id: outputFileId }, {}, function(err, file) {
if (err) { console.warn("" + err); }
return;
});
return stdout.pipe(outStream);
}
}));
});
aktualisiert
Ich versuchte meteorhacks:async
zu verwenden, aber ich erhalte die Fehler Exception in callback of async function: TypeError: Object [object Object] has no method 'size'
.
function imageManipulation(inputId, method) {
var inStream = Files.findOneStream({ _id: inputId }),
gmread;
if (method == 'crop') {
gmread = gm(inStream);
// Asnyc doesn't work
gmread = Async.runSync(function(done) {
gmread.size(function(err, size) {
if (size.width > 900) {
gmread = gmread.resize('900');
}
done(null, gmread);
});
});
}
return gmread.stream('jpg', Meteor.bindEnvironment(function(err, stdout, stderr) {
stderr.pipe(process.stderr);
if (!err) {
var outStream = Files.upsertStream({ _id: outputFileId }, {}, function(err, file) {
if (err) { console.warn("" + err); }
return;
});
return stdout.pipe(outStream);
}
}));
});
Vielleicht verstehe ich es nicht richtig, aber ich warte auf das Ergebnis von 'gored.size', um weiter zur Stream-Funktion zu gehen. Du hast es andersherum gemacht ...?! – user3142695
Hat es funktioniert? –
nein, es hat nicht funktioniert – user3142695