为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决 Javascript 错误“.then is not a function”?

如何解决 Javascript 错误“.then is not a function”?

摇曳的蔷薇 2021-11-25 16:48:46
以下代码从 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);    });  }
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

s3.getObject(params, function (err, data) {

   ...

   return deferred.promise;

}).then(function(parsedData) {

  ...

})

s3.getObject()似乎是不返回承诺的回调式 API。当然,它的回调似乎是,但getObject()函数本身却没有。


您需要做的是转换s3.getObject()以返回承诺。Node 有utils.promisify()which 将采用回调风格的 API 并返回该函数的一个版本,该版本返回一个承诺。你可能可以这样做:


const util = require('util')


const getObject = util.promisify(s3.getObject)


getObject(params)

  .then(function(parsedData){

    ...

  })


查看完整回答
反对 回复 2021-11-25
?
杨魅力

TA贡献1811条经验 获得超6个赞

aws-sdk.js 最初是用回调编写的,后来他们引入了 Promise。您只需要做的是添加.promise()到您的getObject和您的固定。


下面是一个例子:


s3

.getObject(params)

.promise()

.then(data => {

  const csv = data.Body.toString('utf-8');

  const headers = 'id,start,end,count';

  const parsed = Papa.parse(headers + '\n' + csv, parseOptions);

  return parsed.data

})

.catch(err => {

  console.log(err, err.stack);

})


查看完整回答
反对 回复 2021-11-25
  • 2 回答
  • 0 关注
  • 867 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信