2014-06-26 64 views
0

我有以下代碼從一個流中讀取並上傳到Dropbox。但我發現了一個通過節點js上傳到保管箱失敗

Uncaught TypeError: Cannot call method 'toString' of undefined 
    at Function.Dropbox.Util.Xhr.Xhr.urlEncodeValue (node_modules\dropbox\lib\dropbox.js:3695:40) 
    at Function.Dropbox.Util.Xhr.Xhr.urlEncode (node_modules\dropbox\lib\dropbox.js:3689:59) 
    at Xhr.Dropbox.Util.Xhr.Xhr.paramsToUrl (node_modules\dropbox\lib\dropbox.js:3570:40) 
    at Xhr.Dropbox.Util.Xhr.Xhr.prepare (node_modules\dropbox\lib\dropbox.js:3598:14) 
    at Client.Dropbox.Client.Client._dispatchXhr (node_modules\dropbox\lib\dropbox.js:2137:11) 
    at Client.Dropbox.Client.Client.resumableUploadStep (node_modules\dropbox\lib\dropbox.js:1454:19) 
    ..... 

錯誤,當我嘗試運行code.If我給一個「假」如光標,不階躍函數發生錯誤,但它仍然在完成功能occures。誰可以幫我這個事?

stream.on('data', function (data) { 
    client.resumableUploadStep(data, function (error, cursor) { 
     if (error) { 
      return console.log(error); 
     }  
    }) 
}); 

stream.on('end', function() { 
    client.resumableUploadFinish(fileName, function (error, stats) { 
     if (error) { 
      return callback(error); 
     } 
     return callback(null, stats); 
    }); 
}); 

我用下面的代碼,現在它的工作原理。

var pcursor = null; 
var eventObject = new EventEmitter(); 
var counter = 0; 
stream.on('data', function (data) { 
    counter++;  
    client.resumableUploadStep(data, pcursor, function (error, cursor) { 
      if (error) {     
       return callback(error); 
      } 
      counter--; 
      pcursor = cursor; 
      eventObject.emit('event');    
    }); 
}); 

stream.on('end', function() { 
     eventObject.on('event', function() { 
      if (counter == 0) { 
       client.resumableUploadFinish(fileName, pcursor, function (error, stats) { 
        if (error) { 
         return callback(error); 
        } 
        return callback(null, stats); 
       }); 
       counter = -1; 
      } 
     }); 

     eventObject.emit('event'); 
}); 

回答

1

它看起來像你缺少光標參數resumableUploadFinish。另外,您也應該在第一次調用之後將光標傳遞給resumableUploadStep

我想你想要的代碼是這樣的(經過充分測試):

var cursor = null; 
stream.on('data', function (data) { 
    client.resumableUploadStep(data, cursor, function (error, new_cursor) { 
     cursor = new_cursor; 
    }); 
}); 
stream.on('end', function() { 
    client.resumableUploadFinish(fileName, cursor, function (error, stats) { 
     return callback(null, stats); 
    }); 
}); 
+0

有我的代碼中2個問題。我曾嘗試使用光標。但是我使用cursor = false而不是cursor = null。其他問題是在完成步驟功能之前調用完成方法。因此我添加了一個事件發射器。現在它起作用了。 :) 謝謝。 –