2014-12-03 2 views
0

Datastore JS API를 통해 Dropbox에 많은 수의 레코드 (2000-ish)를 게시하려고합니다. 이 오류 받고 있어요 :JavaScript 데이터 저장소 API 요청의 Dropbox 400 오류

POST https://api12.dropbox.com/1/datastores/put_delta 400 (Bad Request)

을 ... 그리고 참조 : 때 디버깅 정보를 많이 아니에요 api12.dropbox.com/1/datastores/put_delta:1

사용,하지만 난 이상이기 때문에 그것의 생각 해요 크기 제한

어떻게 해결할 수 있습니까? 아니면 더 이상 디버깅 할 수있는 아이디어가 있습니까? 암시 "동기화"때마다 코드 수익률은 다시 제어있어,

{"error": 
    { 
    "size_limit": "Error: put_delta of delta (size 4138335) exceeds size limit 2097152 bytes", 
    "object_type": "delta", 
    "limit": 2097152, 
    "size": 4138335 
} 
} 
+0

응답 본문에 어떤 것이 있습니까? 오류에 대한 유용한 정보가 포함되어야한다고 생각합니다. – Greg

+0

나는 다시 보았고 응답 JSON (위 참조)을 발견했다. 내 애플 리케이션에서'POST'의 크기를 알지 못한다면. 요청을 청크로 분해 할 수있는 방법이 있습니까? 요청 크기를 줄이기 위해 iOS SDK에있는 것처럼 주기적으로 "동기화"할 수 있습니까? –

답변

1

JS SDK에서 : 업데이트

나는이 응답을 얻기 위해 크롬에서 XHR 관리자를 사용 브라우저. 따라서 많은 양의 데이터를 입력하는 for 루프를 작성하면 모두 단일 델타로 들어갑니다. 작은 덩어리로 글을 작성하면 문제를 해결할 수 있습니다. 예를 들어, 다음과 같은 것 (테스트되지 않은, 미안, 한 가지 오류 등이있는 경우 미안) :

var LIMIT = 100; // how many things to write in a single delta 

function writeThings(arrayOfThings) { 

    // write up to LIMIT things 
    for (var i = 0; i < arrayOfThings.length && i < LIMIT; i++) { 
     writeSingleThing(arrayOfThings[i]); 
    } 

    if (i < arrayOfThings.length) { 
     // more to write 

     window.setTimeout(function() { 
      // after a tick, continue from where we left off 
      writeThings(arrayOfThings.slice(i)); 
     }, 1); 
    } else { 
     // done writing 
    } 

} 
+0

이것은 재미 있고 도움이됩니다. 감사합니다. 'if/else' 문은'for' 루프 안에 있어야하기 때문에'i'를 참조 할 수 있습니까? –

+0

아니요, 'if/else'가 있어야합니다. '나는'여전히 범위에 있어야합니다. 왜, 오류가 보이니? – smarx

+0

맞습니다. 아직 범위가 있습니다 (JavaScript가 이상합니다). :) 나는 진짜 문제를 발견했다. 'setTimeout' 함수는 첫 번째 매개 변수가 함수이고 두 번째 매개 변수가 타임 아웃 간격이되어야합니다. 이것은 나를 위해 큰 지금 일하고있다. 델타 한도를 치지 않고 큰 데이터 세트를 업로드 할 수 있습니다. 고맙습니다! –