我正在使用 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/