javascript - 如何在回调之外赋值

标签 javascript typescript parameters callback

我正在使用 Angular 4(使用 TypeScript/JavaScript 语言)开发一个 Web 应用程序。 不幸的是我不太了解 JavaScript 及其回调机制。 我有个问题。如果我调用一个以函数作为参数的方法,如下所示:

    this.cognitoIdentityServiceProvider.listUsers(params,function(err,data) {
       if (err) console.log(err, err.stack);
       else {
         console.log(data);      
    }

我可以使用data参数仅在 function(err,data) 的主体内而不是其他地方。

如果我在function(err,data)内初始化一个外部对象,看起来对象只在函数内取正确的值,但是 不是外部的,如本例所示:

var myData = null; // external variable declaration

this.cognitoIdentityServiceProvider.listUsers(params,function(err,data) {
   if (err) console.log(err, err.stack);
   else {
     myData = data;
     console.log(myData); // prints the date value (correctly)  
}
console.log(myData); // print 'null' but I would like the data of 'data' object 

我很乐意在 function(err,data) 之外使用这些数据将它们作为参数传递。不幸的是我不知道该怎么做。

最佳答案

你不能那样做。您必须将回调包装在 Promise 中并在 .then() 中访问它,或者使用回调传递变量。当存在异步代码时,您不能期望它同步访问它您可以使用该代码

function PromiseWrapped(){
    return new Promise(function(resolve, reject)){
        this.cognitoIdentityServiceProvider.listUsers(params,function(err,data) {
           if (err) reject(err)
           else {
             resolve(data);
        }
    }
}

PromiseWrapped().then(function(data){
    console.log(data)
})

关于javascript - 如何在回调之外赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361720/

相关文章:

Javascript for 循环返回 "copy"作为值

javascript - SQL 与 JavaScript 中 2 个时间序列的相交

javascript - 在不污染源代码的情况下在 Javascript 中添加日志记录

typescript - 在转换为 TypeScript 中的类型的变量上调用 `new`

reactjs - 使用 moment 时 DatePicker 上的 React Moment 问题(可能依赖)

ms-access - 将报表的打开事件中的参数传递给参数查询 (Access 2007)

c - 在 C 函数声明中, "..."作为最后一个参数有什么作用?

javascript - 如何创建两个变量的变量

reactjs - 如何解决错误: "You gave us a visitor for the node type TSSatisfiesExpression but it' s not a valid type"?

Swift func参数奇怪