【问题标题】:How to assign a value outside the callback [duplicate]如何在回调之外分配一个值[重复]
【发布时间】:2017-09-22 09:48:02
【问题描述】:

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

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

我只能在function(err,data) 的主体内使用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) 之外使用这些数据将它们作为参数传递。不幸的是,我不知道该怎么做。

【问题讨论】:

    标签: javascript typescript parameters callback


    【解决方案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)
    })
    

    【讨论】:

    • 谢谢,能给我一个代码示例吗?不知道JavaScript同步和异步调用的机制
    • 谢谢,但是这个例子太长了,我不能让它与我的情况相匹配,因为我的方法 listUser 需要两个输入参数,而不仅仅是函数!如果你写了我如何自定义我的代码,你会帮我一个忙!
    • 编辑了答案
    • 给我一个错误:错误:未捕获(承诺中):TypeError:无法读取未定义的属性'cognitoIdentityServiceProvider'
    猜你喜欢
    • 2021-08-17
    • 2020-01-11
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多