2 回答
TA贡献1789条经验 获得超10个赞
上述答案需要进行一个小的编辑,返回语句应该在函数的末尾。
function getS3Data() {
let deferred = $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
//return parsedData; // do not return data
deferred.resolve(parsedData); // resolve the deferred with the data
}
});
return deferred.promise; // important! return the promise, NOT THE DATA
}
TA贡献1951条经验 获得超3个赞
Deferred 用于将回调函数转换为承诺函数。
function getS3Data() {
let deferred = $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
//return parsedData; // do not return data
deferred.resolve(parsedData); // resolve the deferred with the data
}
});
return deferred.promise; // important! return the promise, NOT THE DATA
}
调用函数时,必须定义.then()/.catch()函数:
getS3Data().then(function(parsedData) {
console.log(parsedData);
}).catch(function(err) {
console.log(err, err.stack);
});
添加回答
举报