Разорвать цепь Promise внутри цикла for

Отправка электронной почты с вложением в ASP.Net с простой кодировкой. В этой статье я покажу вам, как вы можете это сделать.

Index.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="_Default" Debug="true" %>






Careers



Index.aspx.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void bttn_Send_Click(object sender, EventArgs e)
{
string from = “info@suryarpraveen-wordpress.com”;
string textTo = “careers@suryarpraveen-wordpress.com”;
using (MailMessage mail = new MailMessage(from, textTo))
{

mail.Subject = “Careers – Surya R Praveen WordPress”;

mail.Body = string.Format(@”
Name: {0}
Email: {1}
Contact: {2}
Job: {3}
Experience: {4}
“, txtName.Text, txtEmail.Text, txtcontact.Text, txtjobTitle.SelectedItem.Text, txtjobExp.SelectedItem.Text);

if (fileUploader.HasFile)
{
string fileName = Path.GetFileName(fileUploader.PostedFile.FileName);
mail.Attachments.Add(new Attachment(fileUploader.PostedFile.InputStream, fileName));
}
mail.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Host = “mail.suryarpraveen-wordpress.com”;
smtp.EnableSsl = false;
NetworkCredential networkCredential = new NetworkCredential(from, “password@007”);
smtp.UseDefaultCredentials = true;
smtp.Credentials = networkCredential;
smtp.Port = 25;
smtp.Send(mail);
ClientScript.RegisterStartupScript(GetType(), “alert”, “alert(‘Message has been sent successfully.’);”, true);
}
}
}

https://suryarpraveen.wordpress.com/2017/08/22/how-to-send-email-with-attachment-in-asp-net/

2
задан Dev Aggarwal 24 February 2019 в 21:10
поделиться

2 ответа

Гораздо проще сделать с синтаксисом async/await:

async function pro(arr) {
    const self = {req: {}, res: {}};
    for(const f of arr) await f.call(self);
    return self;
}

async function pro(arr) {
    const self = {req: {}, res: {}};
    for(const f of arr) await f.call(self);
    return self;
}

const x = function () {
  const self = this;
  return new Promise(resolve => {
    self.req = {key: "value"}
    resolve();
  })  
}

const y =  function () {
  const self = this;
  return new Promise((resolve, reject) => {
    console.log(self);
    reject("y failed");
  })
}

const z = function () {
  const self = this;
  return new Promise((resolve, reject) => {
  	console.log('failed');
  })
}

pro([x, y, z]).then((self) => {
  console.log('final',self);
})
.catch(e => {
  console.log('error', e);
});

0
ответ дан trincot 24 February 2019 в 21:10
поделиться

Вот альтернативный ответ, который просто выполняет обещания подряд, если только обещание не было отклонено, а затем остановлено. Это не использует await, но должно дать вам общее представление о том, как это можно сделать без него, но этот код также был написан очень быстро, поэтому он не самый оптимизированный код.

const x = function() {
  return new Promise(resolve => {
    resolve('it resolved ma!');
  });
};

const y = function() {
  const self = this;
  return new Promise((resolve, reject) => {
    reject("reject");
  });
};

const z = function() {
  const self = this;
  return new Promise((resolve, reject) => {
    resolve("never gets executed");
  });
};

function runPromises(promises) {
  const results = [];
  let count = 0;
  const executePromise = i => {
    count++;
    return promises[i]()
      .then((response) => {
        results.push(response);
        if (count !== promises.length) {
          executePromise(count);
        }
      })
      .catch((e) => {
        results.push(e);
        console.log("stop right now, thank you very much");
      });
  };
  if (Array.isArray(promises)) {
    executePromise(count);
  }
  return results;
}

const results = runPromises([x, y, z]);
console.log(results);

0
ответ дан Win 24 February 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: