如何解决Javascript错误';。那么这不是一个函数';?
下面的代码从S3获取csv数据并将其转换为JSON。 我得到了如何解决Javascript错误';。那么这不是一个函数';?,javascript,node.js,angularjs,callback,Javascript,Node.js,Angularjs,Callback,下面的代码从S3获取csv数据并将其转换为JSON。 我得到了。那么在以下方面不是函数错误。可能的问题是什么 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);
。那么在以下方面不是函数
错误。可能的问题是什么
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);
});
}
s3.getObject()
似乎是一个不返回承诺的回调式API。当然,它的回调似乎是,但函数本身却不是
您需要做的是转换s3.getObject()
以返回承诺。节点具有,它将接受回调样式的API并返回该函数的一个版本,该版本将返回一个承诺。您可能可以:
const util = require('util')
const getObject = util.promisify(s3.getObject)
getObject(params)
.then(function(parsedData){
...
})
aws-sdk.js最初是用回调编写的,后来它们引入了承诺。 您只需将
.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()
我打赌它不会返回承诺。不要把这两种风格混为一谈;将回调代码放入。然后()。
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);
})