Sendgrid-nodejs: المكتبة ليست قادرة على الوعد

تم إنشاؤها على ٢٢ يناير ٢٠١٦  ·  18تعليقات  ·  مصدر: sendgrid/sendgrid-nodejs

للحفاظ على اتساق هيكل طلبي ونهجه ، أستخدم وظيفة وعد Bluebird لتحويل عمليات الاسترجاعات إلى وعود.

لسوء الحظ ، ويبدو أن هذا يرجع إلى استخدام "this" داخل sendgrid.js ، فإن التعهد باستخدام طريقة "send" على SendGrid يؤدي إلى جعل "هذا" غير محدد ، وبالتالي لا يمكن جلب "api_user" ولا يمكن إرسال البريد الإلكتروني .

هذا عار لأنه يجبرني على العودة إلى نهج رد الاتصال.

هل لي أن أقترح أن تربط العناصر الداخلية للمكتبة السياق الصحيح عند استخدام هذا ، أو _هذا (حيث يبدو أنه تم تعريفه في sendgrid.js).

إذا تلقيت طلبات سحب ، فسأكون سعيدًا بإجراء هذه الإصلاحات بنفسي.

help wanted community enhancement

التعليق الأكثر فائدة

antonydslounge هناك هو في الواقع بالفعل بنيت في طريقة للتعامل مع طريقة promisify ذلك باستخدام وبلوبيرد عن طريق تمرير في سياق بلوبيرد الاستخدام ل"هذا"

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

ال 18 كومينتر

مرحبا antony ،

سنضيف هذا الطلب إلى سجلنا الخلفي.

نعم ، نحن نقبل طلبات السحب ويسعدنا مراجعة تغييراتك.

شكر!

عظيم - شكرا على ذلك!

أردت فقط أن أؤيد هذه القضية. كنت آمل أن أتمكن من التعهد لكنها لم تنجح. antony إذا انتهى بك الأمر إلى إجراء هذا التغيير فسوف يجعل حياتي أسهل: د

راجع للشغل ، ليس بالأمر المهم أن نلتزم بـ sendgrid.send بوعد إذا كان أي شخص يحتاج إليه حقًا. كل ما عليك فعله هو (مثال es6):

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
  });

antonydslounge هناك هو في الواقع بالفعل بنيت في طريقة للتعامل مع طريقة promisify ذلك باستخدام وبلوبيرد عن طريق تمرير في سياق بلوبيرد الاستخدام ل"هذا"

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

أود عدم استخدام بلوبيرد على الإطلاق. عندما لا يتم توفير رد نداء إلى sendgrid.send () ، ما عليك سوى إرجاع الوعد. بلوبيرد هو في الواقع حل مؤقت

mynameiscoffey يبدو الحل الخاص بك هو الحل الصحيح.

أيها الناس ،

ربما يكون هناك شيء مفيد للأشخاص الذين يستخدمون Parse و Sendgrid معًا والذين قاموا بالترحيل إلى الخادم الخاص بهم لأن Parse قيد الإغلاق. إليك إصدار "Parse.Promified" من كود dslounge (الذي أريدك أن تقوم

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);
    }
  });
});

مرحبا بالجميع،

لست متأكدًا من استمرار مشكلة "هذه" في الإصدار الجديد من هذه المكتبة ، لذلك أبقي هذه المشكلة مفتوحة في الوقت الحالي.

يمكنك التحقق من المكتبة الجديدة هنا: https://github.com/sendgrid/sendgrid-nodejs/tree/v3beta. سيكون خارج النسخة التجريبية في غضون أسابيع قليلة.

شكرا لدعمك!

مع أحر تحياتي،

إلمر

thinkingserious هل فكرت في اقتراح @ manuel-di-iorio؟ على سبيل المثال ، وعود العودة من API الخاص بك إذا لم يتم توفير رد الاتصال؟ من شأن ذلك أن يزيل الحاجة إلى استخدام التعهد كليًا.

ليس adambuczynski بعد ، لكنني بالتأكيد منفتح على أي تحسينات لهذه المكتبة.

في الوقت الحالي ، أصدرنا للتو نقطة النهاية الجديدة v3 / mail / send خارج الإصدار التجريبي وفي المستقبل القريب سنصلح أي أخطاء تظهر على السطح منذ إعادة إطلاق جميع مكتباتنا بالأمس.

سأترك هذه التذكرة مفتوحة لمزيد من الدراسة. نقدر أي ملاحظات إضافية لديك!

thinkingserious نعم لقد بحثت في الكود ، هناك بعض التحسينات التي أود

لقد أنشأت هذا الغلاف في الوقت الحالي لأتمكن من العمل مع sendgrid في سلسلة الوعد:

/**
 * 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 الدعم هنا: https://github.com/sendgrid/sendgrid-nodejs/issues/261

للمساعدة في نقله إلى أعلى قائمة انتظار الدمج ، نحتاج إلى تعليقات و +1

شكرا لكم جميعا!

thinkingserious أعتقد أنك قصدت الارتباط

adamreisnz ، إصلاح واحد على الكود الخاص بك: وفقًا للوثائق ، تتلقى الوظيفة خطأ كأول معلمة:

sg.API (طلب ، وظيفة (خطأ ، استجابة) {

على أي حال ، شكرا لك المشاركة!

حسنًا ، ربما تغير ذلك أو ربما فاتني ، شكرًا :)
لقد قمت منذ ذلك الحين بإنشاء مكتبة الغلاف البسيطة هذه لتبسيط التفاعل مع حزمة Sendgrid: https://www.npmjs.com/package/sendgrid-mailer

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات