【问题标题】:Javascript Cognito understanding async and await?Javascript Cognito 理解异步和等待?
【发布时间】:2019-09-16 03:43:26
【问题描述】:

我正在调用此函数来检索用户属性,但是当我测试该函数时,返回结果始终为“test”,然后它通过“cognitoUser.getUserAttributes”并记录实际结果。我不确定为什么,但最初似乎跳过了“cognitoUser.getUserAttributes”。

运行时,它会打印出 test 而不是实际结果

有什么想法吗?

function retrieveattribute(e) {
  var ans = "test";
  var e = "custom:InstanceID_1";
  cognitoUser.getUserAttributes(function(err, result) {
    if (err) {
      alert(err);
      return;
    }
    for (i = 0; i < result.length; i++) {
      if (result[i].getName() == e) {
        ans = result[i].getValue();
        console.log(ans);
        return ans;
      }
    }
  });
  return ans;
}

【问题讨论】:

标签: javascript asynchronous async-await amazon-cognito


【解决方案1】:

对于启动“异步代码”,您需要包装您的函数以承诺:

function retrieveattribute(e) {
    return new Promise(function(res) {
        var ans = "test";
        var e = "custom:InstanceID_1";

        cognitoUser.getUserAttributes(function(err, result) {
            if (err) {
                alert(err);
                return;
            }
            for (i = 0; i < result.length; i++) {
                if (result[i].getName() == e) {
                    ans = result[i].getValue();
                    console.log(ans);
                    res(ans);
                }
            }
        });
    })
}

在它之后你可以用作承诺:

   retrieveattribute(e).then(t => console.log(t))

或者在异步函数中等待它:

   await retrieveattribute(e)

【讨论】:

    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多