.then
принимает функцию в качестве аргумента. Когда вы делаете
PromiseConfirmIdNotSet(userId)
.then(SetId(userId, identityId))
.catch();
PromiseConfirmIdNotSet
вызывается и синхронно , SetId
вызывается, в то время как интерпретатор пытается построить цепочку Promise
из функции, переданной в .then
. (Но SetId
не возвращает функцию) Затем, после этого, выполняется асинхронный код PromiseConfirmIdNotSet
, и Promise
разрешается - что не в том порядке, в котором вы хотите.
Измените его так, чтобы SetId
вызывался только после , обещание, возвращенное PromiseConfirmIdNotSet
, разрешается:
PromiseConfirmIdNotSet(userId)
.then(() => SetId(userId, identityId))
.catch();
Проблема схожа с тем, почему
addEventListener('click', fn());
не работает - вы изменили бы его на , fn);
или , () => fn());
.
Если вы хотите, чтобы context.done
происходил только после успешного SetId
, поместите вызов context.done
в .then
:
PromiseConfirmIdNotSet(userId)
.then(() => {
SetId(userId, identityId);
context.done(null, 'Hello World'); // SUCCESS with message
});