Sendgrid-nodejs: Bibliothek ist nicht vielversprechend

Erstellt am 22. Jan. 2016  ·  18Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Um die Struktur und den Ansatz meiner Anwendung konsistent zu halten, verwende ich die Promisify-Funktion von Bluebird, um Rückrufe in Versprechen umzuwandeln.

Leider, und es scheint an der Verwendung von 'this' in sendgrid.js zu liegen, führt das Versprechen der 'send'-Methode in SendGrid dazu, dass' this 'undefiniert wird und daher' api_user 'nicht abgerufen und keine E-Mails gesendet werden können .

Dies ist eine Schande, da es mich zurück zum Rückrufansatz zwingt.

Darf ich vorschlagen, dass die Interna der Bibliothek den richtigen Kontext binden, wenn Sie dies verwenden, oder _this wird verwendet (wie es in sendgrid.js definiert zu sein scheint).

Wenn Sie Pull-Anfragen annehmen, würde ich diese Korrekturen gerne selbst vornehmen.

help wanted community enhancement

Hilfreichster Kommentar

@antony @dslounge Es gibt bereits eine integrierte Methode, um dies mithilfe der Promisify-Methode von Bluebird zu handhaben, indem ein Kontext übergeben wird, den Bluebird für "this" verwenden kann.

const Promise = require('bluebird');
const sendgrid = require('sendgrid')(sendgridKey);
const sendEmail = Promise.promisify(sendgrid.send, { context: sendgrid });

Alle 18 Kommentare

Hallo @antony ,

Wir werden diese Anfrage in unser Backlog aufnehmen.

Ja, wir akzeptieren Pull-Anfragen und würden uns freuen, Ihre Änderungen zu überprüfen.

Vielen Dank!

Großartig - danke dafür!

Ich wollte dieses Thema nur unterstützen. Ich hatte gehofft, ich könnte versprechen, aber es hat nicht funktioniert. @antony Wenn du diese Änderung machst, würde das mein Leben leichter machen: D.

Übrigens ist es keine große Sache, sendgrid.send in ein Versprechen zu packen, wenn jemand es wirklich braucht. Alles was Sie tun müssen ist (es6 Beispiel):

const Promise = require('bluebird');
const sendgrid = require('sendgrid')(sendgridKey);
const sendEmail = (params) => {
  return new Promise((resolve, reject) => {
    sendgrid.send(params, (err, json) => {
      if (err) {
        reject(err);
      } else {
        resolve(json);
      }
    });
  });
};

sendEmail(emailParams)
  .then((json) => {
    //success
  })
  .catch((err) => {
    //error
  });

@antony @dslounge Es gibt bereits eine integrierte Methode, um dies mithilfe der Promisify-Methode von Bluebird zu handhaben, indem ein Kontext übergeben wird, den Bluebird für "this" verwenden kann.

const Promise = require('bluebird');
const sendgrid = require('sendgrid')(sendgridKey);
const sendEmail = Promise.promisify(sendgrid.send, { context: sendgrid });

Ich möchte Bluebird überhaupt nicht verwenden. Wenn kein Rückruf an sendgrid.send () bereitgestellt wird, geben Sie einfach ein Versprechen zurück. Bluebird ist eigentlich eine vorübergehende Problemumgehung

@mynameiscoffey Ihre Lösung sieht aus wie die richtige.

Hey Leute,

Vielleicht etwas Nützliches für Leute, die Parse und Sendgrid zusammen verwenden und auf ihren eigenen Server migriert sind, weil Parse geschlossen wird. Hier ist die "Parse.Promified" -Version des @ dslounge- Codes (ich möchte, dass Sie die Hauptrolle spielen, das hat mir eine Stunde gespart):

return new Parse.Promise(function (resolve, reject) {
  sendgrid.send({
    to: xxx,
    from: xxx,
    subject: xxx,
    text: xxx,
    replyto: xxx
  }, function (err, json) {
    if (err) {
      reject(err);
    } else {
      resolve(json);
    }
  });
});

Hallo, alle miteinander,

Ich bin mir nicht sicher, ob das Problem "this" in der neuen Version dieser Bibliothek weiterhin besteht. Daher halte ich dieses Problem vorerst offen.

Sie können die neue Bibliothek hier überprüfen: https://github.com/sendgrid/sendgrid-nodejs/tree/v3beta. Es wird in ein paar Wochen aus der Beta sein.

Danke für deine Unterstützung!

Mit besten Empfehlungen,

Elmer

@thinkingserious Hast du über den Vorschlag von @ manuel-di-iorio nachgedacht? ZB Rückgabeversprechen von Ihrer API, wenn kein Rückruf bereitgestellt wird? Das würde die Notwendigkeit beseitigen, die Verheißung insgesamt verwenden zu müssen.

Noch nicht @adambuczynski , aber ich bin definitiv offen für Verbesserungen an dieser Bibliothek.

Derzeit haben wir gerade unseren neuen v3 / mail / send-Endpunkt aus der Beta heraus veröffentlicht. In naher Zukunft werden wir alle Fehler beheben, die seit dem gestrigen Neustart aller unserer Bibliotheken aufgetreten sind.

Ich lasse dieses Ticket für weitere Überlegungen offen. Jedes zusätzliche Feedback, das Sie haben, wird geschätzt!

@thinkingserious Ja, ich habe mir den Code angesehen. Es gibt einige Verbesserungen, die ich vorschlagen würde. Ich werde sehen, ob ich Zeit habe, einige PRs für sie zu erstellen, einschließlich dieser.

Ich habe diesen Wrapper jetzt erstellt, um mit sendgrid in einer Versprechenskette arbeiten zu können:

/**
 * Send email (wrapped in promise)
 */
function sendMail(mail) {
  return new Promise((resolve, reject) => {

    //Build request
    let request = sg.emptyRequest();
    request.method = 'POST';
    request.path = '/v3/mail/send';
    request.body = mail.toJSON();

    //Send request
    sg.API(request, response => {
      if (response && response.statusCode &&
        response.statusCode >= 200 && response.statusCode <= 299) {
        resolve(response);
      }
      reject(new SendMailError(
        'Sendgrid response error ' + response.statusCode
      ));
    });
  });
}

@adambuczynski hat hier Unterstützung hinzugefügt: https://github.com/sendgrid/sendgrid-nodejs/issues/261

Um es zum Zusammenführen in die Warteschlange zu rücken, benötigen wir Kommentare und +1

Vielen Dank an alle!

@thinkingserious Ich denke du

@adamreisnz , ein Fix für Ihren Code: Laut Dokumentation erhält die Funktion als ersten Parameter einen Fehler:

sg.API (Anfrage, Funktion (Fehler, Antwort) {

Wie auch immer, danke, dass du teilst!

Ok, vielleicht hat sich das geändert oder ich habe es verpasst, danke :)
Ich habe seitdem diese einfache Wrapper-Bibliothek erstellt, um die Interaktion mit dem Sendgrid-Paket zu vereinfachen: https://www.npmjs.com/package/sendgrid-mailer

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

thinkingserious picture thinkingserious  ·  4Kommentare

TobiahRex picture TobiahRex  ·  3Kommentare

polkhovsky picture polkhovsky  ·  3Kommentare

thidasapankaja picture thidasapankaja  ·  4Kommentare

mikemaccana picture mikemaccana  ·  4Kommentare