Node.JS 10.15, без сервера, лямбды, локально
ОБРАЗЕЦ A) Это работает:
export async function main(event) {
const marketName = marketIdToNameMap[event.marketId];
const marketObject = marketDirectory[marketName];
const marketClient = await marketObject.fetchClient();
const marketTime = await marketObject.getTime(marketClient);
console.log(marketTime);
}
ОБРАЗЕЦ B) и это работает:
export function main(event) {
const marketName = marketIdToNameMap[event.marketId];
const marketObject = marketDirectory[marketName];
marketObject.fetchClient().then((marketClient)=>{
marketObject.getTime(marketClient).then((result) => {
console.log('<---------------> marker 1 <--------------->');
console.log(result);
});
});
}
SAMPLE C), но это не так:
export async function main(event) {
const marketName = marketIdToNameMap[event.marketId];
const marketObject = marketDirectory[marketName];
const marketClient = await marketObject.fetchClient();
console.log('<---------------> marker 1 <--------------->');
marketObject.getTime(marketClient).then((result) => {
console.log('<---------------> marker 22 <--------------->');
console.log(result);
});
}
внутренности getTime для всех примеров:
function getTime(marketClient){
return new Promise((resolve, reject) => {
return marketClient.getTime((err, result) => {
if (err) {
reject(err);
}
resolve(result);
});
}).catch(err => {
throw err;
});
}
, очевидно, что проблема заключается в смешивании асинхронных / ожидающих сКлассическое обещание тогдашних способностей.Я бы ожидал SAMPLE C, чтобы работать, потому что getTime () возвращает обещание.Однако код просто завершается тихо, никогда не ударяя по второму маркеру.Я должен поставить первый маркер там, чтобы быть уверенным, что любой код вообще выполняется.Такое чувство, что я должен быть в состоянии смешать асинхронные / ожидающие и доступные для чтения, но я не должен здесь что-то рассматривать.
@ adrian, nope