2017-09-22 26 views
0

我正在用Angular 4开发一个Web应用程序(使用TypeScript/JavaScript语言)。 不幸的是,我不太了解JavaScript及其回调机制。 我有一个问题。如果我调用了一个函数作为参数的方法,这这样的: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

你不能那样做。你必须将你的回调包装在承诺中,然后在.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) 
}) 
+0

谢谢,你能给我一个代码的例子吗?我不知道同步和异步JavaScript调用机制 – claudioz

+0

检查答案在https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call – marvel308

+0

谢谢,但这个例子太长了,我不能使它与我的情况相匹配,因为我的方法listUser接受两个输入参数,而不仅仅是函数! 如果你给我写了我如何定制我的代码,你会帮我一个忙! – claudioz

相关问题