Azure 移动服务 - table.read().done(function (results)) 返回未定义的值

Azure Mobile Services - table.read().done(function (results)) returning undefined values

编辑:该函数是异步的,因此 console.log 在返回数据之前被触发。我现在将把我的逻辑放在这个 .done() 函数中。

我正在尝试获取结果数组并将其传递给全局变量,但该变量在结果函数之外记录为未定义。

然而,这是我在函数内部需要的数组。

我需要在结果函数之外有一个对象数组,因为我无法在该函数内部进行调试并且有很多代码要编写

这是代码

$scope.syncContacts = function () {

        var table = AzureService.getTable('contact');
        var contactList = [];
        table.read().done(function (results) {
            contactList = results;
            for (var i = 0; i < results.length; i++) {
                console.log("Contact Object:", results[i]);
            }
            console.log('contact list is : ', contactList);
        });
        console.log("OUTSIDE FUNCTION LIST", contactList);
    };

我一直在四处阅读,看到一个函数 response.send(200, results) 在 azure 表中使用,但不知道它有什么用,也不知道我是否需要它。

contactList 存在变量范围问题,您正在打印外部变量,并在要填充的承诺中创建一个新变量。

var table = AzureService.getTable('contact');
table.read().done(function (results) {
   $scope.contactList = results;
   for (var i = 0; i < results.length; i++) {
     console.log("Contact Object:", results[i]);
   }
   console.log('contact list is : ',$scope.contactList);
});

这是 AzureService JavaScript 的官方文档:Add Mobile Services to an existing app

编辑:

contactList 由于 promise 解决方案而未定义打印。 done 方法将需要一些时间从服务器获取数据。但是,如果您在 done 内打印它,它将按预期显示结果。你应该把这个值放在一个 $scope 变量中,然后你可以在从服务器读取 returns 数据后使用它: