提问人:azrael v 提问时间:10/18/2019 更新时间:10/18/2019 访问量:505
如何解决 Javascript 错误“.then is not a function”?
How to resolve Javascript error '.then is not a function'?
问:
以下代码从 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);
});
}
答:
0赞
Joseph
10/18/2019
#1
s3.getObject(params, function (err, data) {
...
return deferred.promise;
}).then(function(parsedData) {
...
})
s3.getObject()
似乎是一个回调式的 API,不返回 promise。当然,它的回调似乎是,但函数本身没有。getObject()
您需要做的是转换以返回 promise。Node 具有 utils.promisify(),
它将采用回调样式的 API 并返回返回 promise 的该函数版本。你可以做:s3.getObject()
const util = require('util')
const getObject = util.promisify(s3.getObject)
getObject(params)
.then(function(parsedData){
...
})
0赞
Yuri Khomyakov
10/18/2019
#2
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);
})
评论
s3.getObject()
.then()