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