2 回答
![?](http://img1.sycdn.imooc.com/545868cd00013bbb02200220-100-100.jpg)
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){
...
})
![?](http://img1.sycdn.imooc.com/533e4d510001c2ad02000200-100-100.jpg)
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);
})
添加回答
举报