Может кто-нибудь показать мне, как заставить исполнение ждать
blockquote>Это неправильный вопрос. Вы не пытаетесь заставить казнить «ждать» или, по крайней мере, не должны этого делать. Вам просто нужно вызвать обратный вызов в нужном месте - внутри обратного вызова из
s3.listObjectsV2()
, а не снаружи.function getThumbFileName(videoKey, callback) { ... s3.listObjectsV2(params, (err, data) => { if (err) { ... } var thumbsKey = data.Contents; // MaxKeys was 1 bc first thumbnail key is good enough for now. Therefore, only one iteration. thumbsKey.forEach(function (keys) { console.log('thumbKey = ' + keys.Key); urlKey = keys.Key; }); callback(urlKey); // right }); // wrong // callback(urlKey); }
Как вы написали, обратный вызов срабатывает после того, как
s3.getObjectsV2()
начинает работать , а не после того, как завершает (вызывает собственный обратный вызов).
program Guid;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Uid: TGuid;
Result: HResult;
begin
Result := CreateGuid(Uid);
if Result = S_OK then
WriteLn(GuidToString(Uid));
end.
Скрытые CreateGuid ()
вызывает один из различных API в зависимости от платформы. Например, в Windows сейчас он вызывает UuidCreate
.
Да TGUID
, посмотрите этот пример
program Guid;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
WriteLn(TGUID.NewGuid.ToString());
end.
Также, если вам нужен GUID для объявления интерфейса, нажмите ctrl+shift+g в редакторе кода, чтобы вставить GUID на каретке.