【发布时间】:2019-11-09 20:18:19
【问题描述】:
当我尝试运行“地图”部分时出现错误无法读取未定义的属性“地图”
customers const 在上面声明,所以不确定。 undefined 来自哪里?地图需要声明吗?
const AWS = require('aws-sdk'),
ses = new AWS.SES(),
fetch = require('node-fetch');
exports.handler = async (event) => {
console.log(event.customer_id);
const customers = await getCustomers();
customers.map(async customer => await sendEmailToCustomer(customer));
const customersEmailsPromises = customers.map(async customer => await sendEmailToCustomer(customer));
}
async function getCustomers() {
try {
const resp = await fetch('https://3objects.netlify.com/3objects.json');
const json = await resp.json();
return json;
}
catch(e) {
throw e;
}
}
const sendEmailToCustomer = (customer) => new Promise((resolve, reject) => {
ses.sendEmail({
Destination:
{ ToAddresses: [customer.email] },
Message:
{
Body: { Text: { Data: `Your contact option is ${customer.customer_id}` } },
Subject: { Data: "Your Contact Preference" }
},
Source: "sales@example.com"
}, (error, result => {
if (error) return reject(error);
resolve(result);
console.log(result);
})
);
})
【问题讨论】:
-
好吧,
getCustomers呼叫没有return什么? -
顺便说一句,如果你的处理程序所做的只是重新抛出异常,你应该省略
try/catch -
我猜你也想在
map调用的结果上使用return Promise.all(…)? -
Titus 答案已在上面添加,可能需要“return Promise...”,因为它当前正在返回一个 Promise 错误
-
@Gracie 你确定 fetch 会返回一些东西吗?您可以在网络面板中进行检查吗?另外(正如其他人所提到的)你不需要在前面等待
resp.json();和sendEmailToCustomer(customer)
标签: javascript arrays json async-await aws-lambda