Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AWS Cognito-离线数据可用性_Javascript_Cordova_Amazon Web Services_Offline_Amazon Cognito - Fatal编程技术网

Javascript AWS Cognito-离线数据可用性

Javascript AWS Cognito-离线数据可用性,javascript,cordova,amazon-web-services,offline,amazon-cognito,Javascript,Cordova,Amazon Web Services,Offline,Amazon Cognito,我正在构建一个phonegap应用程序,并使用AWS Cognito存储用户数据。在Cognito的描述中,据说数据是离线可用的。这在我的代码中不起作用: var add_data; function getCognitoData(){ var params = { IdentityPoolId: COGNITO_IDENTITY_POOL_ID, Logins: { 'graph.facebook.com': FACEBOOK_TOKEN } }; AWS.

我正在构建一个phonegap应用程序,并使用AWS Cognito存储用户数据。在Cognito的描述中,据说数据是离线可用的。这在我的代码中不起作用:

var add_data;    
function getCognitoData(){
 var params = {
  IdentityPoolId: COGNITO_IDENTITY_POOL_ID,
  Logins: {
   'graph.facebook.com': FACEBOOK_TOKEN
  }  
 };
 AWS.config.region = AWS_REGION;
 AWS.config.credentials = new AWS.CognitoIdentityCredentials(params);
 AWS.config.credentials.get(function(err) {
  if (err) {
   console.log("Error: "+err);
   return;
  }
  console.log("Cognito Identity Id: " + AWS.config.credentials.identityId);

  var syncClient = new AWS.CognitoSyncManager();

  syncClient.openOrCreateDataset('myDataset', function(err, dataset) {
   dataset.get('myKey', function(err, value) {
    console.log(value, err);
   });

   add_data = function(thisid, thisval) {
    dataset.put(thisid, thisval, function(err, record){
     dataset.synchronize({
      onSuccess: function(data, newRecords) {
       console.log("success", newRecords);
      },
      onFailure: function(err) {
       console.log("error", err);
      },
      onConflict: function(dataset, conflicts, callback) {
       console.log("sync conflict", dataset, conflicts);
       var resolved = [];

       for (var i=0; i<conflicts.length; i++) {
        resolved.push(conflicts[i].resolveWithRemoteRecord());
       }

       dataset.resolve(resolved, function() {
        return callback(true);
       });
      }
     });
    });
   }
  });
 });
}
var添加数据;
函数getCognitoData(){
变量参数={
IdentityPoolId:COGNITO_IDENTITY_POOL_ID,
登录:{
“graph.facebook.com”:facebook\u代币
}  
};
AWS.config.region=AWS_region;
AWS.config.credentials=新的AWS.CognitoIdentityCredentials(参数);
AWS.config.credentials.get(函数(err){
如果(错误){
日志(“错误:+err”);
返回;
}
log(“Cognito标识Id:+AWS.config.credentials.identityId”);
var syncClient=new AWS.CognitoSyncManager();
syncClient.openOrCreateDataset('myDataset',函数(err,dataset){
dataset.get('myKey',函数(err,value){
console.log(值,err);
});
add_data=函数(thisid,thisval){
put(thisid,thisval,function(err,record){
dataset.synchronize({
onSuccess:函数(数据、新记录){
console.log(“success”,newRecords);
},
onFailure:函数(err){
日志(“错误”,err);
},
onConflict:函数(数据集、冲突、回调){
console.log(“同步冲突”、数据集、冲突);
var解析=[];

对于(var i=0;i可以脱机获取数据。您需要访问数据集以获取其中的任何内容,否则这些内容都是空的。您正在这样做吗?如果没有,请尝试这样做,但是如果是,您可以更新上面的代码吗?

aws sdk js有一个错误导致脱机错误。CognitoSync取决于
aws sdk js
。从
aws sdk开始,现在应该可以工作了-js@2.7.21
。确保更新。

嗨,杰夫,谢谢你的快速回答!我包括了添加数据的部分。我在添加数据后立即调用数据集上的同步,但仍然没有脱机可用的数据。嗯……put调用就是将数据写入本地ca的che.您是否检查了put调用中的错误?看起来,标识ID在脱机时丢失,用户联机后会立即分配新的标识。其他人也有同样的问题:为什么需要在“脱机”中同步数据集场景?根据定义,如果应用程序处于脱机状态,它甚至无法同步回Cognito云。为了澄清,您需要在联机时进行同步,以便在本地获取数据,并在脱机时访问数据。您是否找到解决方案?我遇到了相同的问题…自修复错误以来,这对您是否有效?