Javascript Cognito了解异步并等待?

问题描述 投票:0回答:1

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

在运行时,它打印出测试而不是实际结果

有任何想法吗?

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个回答
0
投票

要启动“异步代码”,您需要将函数包装为承诺:

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)
© www.soinside.com 2019 - 2024. All rights reserved.