Какая польза от решимости в обещании в nodejs - PullRequest
0 голосов
/ 27 февраля 2020
function getAuthSecrets() {
    return new Promise((resolve, reject) => {
        let authSecrets = NamespaceManager.getNamespace('******).get('authSecrets');
        if (!authSecrets) {
            sm.getSecret(authConfig.secretName).then((secret) => {
                NamespaceManager.getNamespace('cls2_context').set('authSecrets', secret);
                resolve(secret);
            }).catch((error) => {
                reject(error);
            });
        } else {
            resolve(authSecrets);
        }
    });
}

Здесь он вызывается:

if (username && password) {
            getAuthSecrets().then(secrets => {

Что будет возвращено при вызове getAuthSecret?

1 Ответ

1 голос
/ 27 февраля 2020

authSecrets или secret, в зависимости от того, какой вызов resolve будет выполнен.

Вы хотите return resolve(...), чтобы избежать написания кода, который пытается разрешить дважды.

То, что вы ловите, а затем сразу отказываете, является признаком того, что ваша техника более сложна, чем должна быть. Вы можете поднять значение в контекст Promise с помощью Promise.resolve:

function getAuthSecrets() {
    const authSecrets = NamespaceManager.getNamespace('******).get('authSecrets');
    return authSecrets ? Promise.resolve(authSecrets) :
      sm.getSecret(authConfig.secretName).then((secret) => {
        NamespaceManager.getNamespace('cls2_context').set('authSecrets', secret);
        return Promise.resolve(secret);
       })
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...