(Knoten:2684) UnhandledPromiseRejectionWarning: Unbehandelte Versprechen Ablehnung (Ablehnung-id: 1): TypeError: Cannot read property 'dann' undefined
Ich bin mit .dann zum ersten mal statt .dann nutze ich den callback-Funktion.
Unten ist mein code-snippet:
phantom.create().then(function (ph) {
ph.createPage().then(function (page) {
page.open("http://codebeautify.org/xmlvalidator").then(function (status) {
page.render(base_pdf_path + lpnumber + '.pdf').then(function () {
console.log('PDF generated for waybill');
//Insert waybill url in db.
return waybill_url.insertWaybillUrl('Lpsimer', waybillUrl).then(function (waybill_inserted_resp) {
callback(null, true);
}).catch(function (error) {
callback(err_waybill_inserted);
});
});
});
});
});
Die obige Funktion ist eine Funktion aufrufen, die ist da unten, das ist in einer anderen Datei und ordnungsgemäß aufgerufen mit dem Namen ist waybill.js:
var mongoose = require('mongoose');
var q = require('promised-io/promise');
var WaybillUrlSchema = new mongoose.Schema({
lpnumber: String,
url: String,
waybilltime: Date
});
module.exports = {
insertWaybillUrl: function (lpnumber, url) {
var defer = q.defer();
var waybill_insert = new waybill_url({
lpnumber: lpnumber,
url: url,
waybilltime: new Date()
});
//Save model to MongoDB
waybill_insert.save(function (err, inserted_waybill) {
if (err) {
return defer.reject(err);
}
else {
return defer.resolve(inserted_waybill);
}
});
}
};
Bisher war ich mit diesem Muster zu machen, Rückrufe und es war in Ordnung arbeiten:
waybill_url.insertWaybillUrl('Lpsimer', waybillUrl, function(err, success) {
if (err) {
} else {
}
)}
Nun habe ich zu verwenden .dann durch Nutzung der phantom-code zu schreiben, PDF-und hat es geschafft, den job zu umständlich.
Brauchen Vorschläge, wie ich das machen kann Rückrufe Rückrufe innerhalb.
UPDATE
phantom.create().then(function (ph) {
ph.createPage().then(function (page) {
page.open("http://codebeautify.org/xmlvalidator").then(function (status) {
page.render(base_pdf_path + lpnumber + '.pdf').then(function () {
//Insert waybill url in db.
waybill_url.insertWaybillUrl('Lpsimer', waybillUrl).then(function (waybill_inserted_resp) {
if (waybill_inserted_resp) {
callback(null, true);
}
}).catch(function (error_waybill_url_insert) {
console.log("Error in inserting waybill:" + err_waybill_inserted);
callback(error_waybill_url_insert);
});
}).catch(function (error_render) {
console.log("error_render");
callback(error_render);
});
}).catch(function (error_open) {
callback(error_open);
});
}).catch(function (error_create_page) {
callback(error_create_page);
});
}).catch(function (error_phantom_create) {
callback(error_phantom_create);
});
Nun habe ich Hinzugefügt, fangen für jeden dann wie vorgeschlagen von rsp in seiner Antwort, aber jetzt bin ich immer Fehler, die ich haben gefangen und senden Sie es an einen anderen callback:
Nicht Lesen-Eigenschaft "und dann" undefined
Bin ich immer diese Fehlermeldung, wo ich Hinzugefügt Konsole.log("error_render");
das ist, wo ich bin aufrufende Seite.render-Funktion des phantom.
Meine Anforderung ist einfach. Ich will generieren einer PDF-Datei mithilfe von phantom-und dann will ich einfach nur eine andere Funktion aufrufen, die in einer anderen Datei waybill_url, Funktion-name: waybill_url.insertWaybillUrl. Aber aufgrund von Rückrufen und asynchrone Verhalten dieser einfache Aufruf von zwei Funktionen ist immer umständlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, dass Sie verwenden
catch()
und nicht nurthen()
- oder zwei Argumenten zuthen()
. Sonst werden Sie nicht behandelt Fehler und Sie bekommen die Warnung - das wird ein Fehler sein, nicht eine Warnung, in den nächsten Versionen von Knoten.Finden Sie diese Antwort für weitere Informationen: