如何解决Javascript错误'.then not a function'?

问题描述 投票:0回答:2

以下代码是从S3获取CSV数据并将其转换为JSON。我在下面出现.then is not a function错误。可能是什么问题?

var Papa = require('papaparse');
var AWS = require('aws-sdk')

let deferred = this.$q.defer();
s3.getObject(params, function (err, data) {
      if (err) {
        //console.log(err, err.stack);
        deferred.reject(err);
      }
      else {
        const csv = data.Body.toString('utf-8');
        const headers = 'id,start,end,count';
        const parsed = Papa.parse(headers + '\n' + csv, parseOptions);
        var parsedData = parsed.data;
        console.log(parsedData); //this works

        deferred.resolve(parsedData);  // resolve the deferred with the data
      }
      return deferred.promise;
    }).then(function(parsedData) {
      console.log(parsedData);

    }).catch( function(err) {
      console.log(err, err.stack);
    });

  }
javascript node.js angularjs callback
2个回答
0
投票
s3.getObject(params, function (err, data) {
   ...
   return deferred.promise;
}).then(function(parsedData) {
  ...
})

s3.getObject()似乎是一个回调样式的API,不会返回承诺。当然,它显示为callback,但是getObject()函数本身没有。

您需要做的是转换s3.getObject()以返回承诺。 Node具有utils.promisify(),它将采用回调样式的API,并返回该函数的版本,该版本将返回promise。您可能可以做到:

utils.promisify()

0
投票

aws-sdk.js最初是用回调编写的,后来它们引入了promises。您只需要做的就是将const util = require('util') const getObject = util.promisify(s3.getObject) getObject(params) .then(function(parsedData){ ... }) 添加到.promise()和您的固定内容中。

这里是一个例子:

getObject
© www.soinside.com 2019 - 2024. All rights reserved.