JavaScript:在回调之外分配一个值?

时间:2017-09-22 09:48:03

标签: 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)之外使用这些数据作为参数传递它们。不幸的是我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

你做不到。您可能必须将回调包装在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)
})