Cod*_*ody 5 javascript amazon-s3 node.js promise when-js
我正试图解除AWS S3异步功能,并遇到一个奇怪的错误.鉴于以下代码,
var s3 = new AWS.S3();
var when = require('when');
var nodefn = require('when/node');
var getObjectP = nodefn.lift(s3.getObject);
getObjectP({
Bucket: 'bucket_name',
Key: 'key_name'
})
.then(function(data) {
...
}, function(err) {
...
});
Run Code Online (Sandbox Code Playgroud)
我收到这个错误,
Object #<Object> has no method 'makeRequest'
Run Code Online (Sandbox Code Playgroud)
这是getObject通常的样子(当我使用回调而不是promises时,它工作正常):
s3.getObject({ ... }, function(err, data) {
...
});
Run Code Online (Sandbox Code Playgroud)
我在滥用nodefn.lift吗?这看起来很简单.这是所有感兴趣的人的文档.https://github.com/cujojs/when/blob/master/docs/api.md#nodelift
Ber*_*rgi 15
可能该方法具有错误的上下文,因为它不被称为方法.尝试bind一下:
var getObjectP = nodefn.lift(s3.getObject.bind(s3));
Run Code Online (Sandbox Code Playgroud)
AWS Javascript SDK 现在支持 Promises(https://aws.amazon.com/blogs/developer/support-for-promises-in-the-sdk/)。您可以使用内置的 Promise 实现(如果您使用的是 ES6),也可以使用几个可用的 Javascript Promise 库之一。
var AWS = require('aws-sdk');
AWS.config.setPromisesDependency(require('when'));
var s3 = new AWS.S3();
s3.getObject({
Bucket: 'bucket_name',
Key: 'key_name'
}).promise()
.then(function(data) {
...
}, function(err) {
...
});
Run Code Online (Sandbox Code Playgroud)
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
s3.getObject({
Bucket: 'bucket_name',
Key: 'key_name'
}).promise()
.then(function(data) {
...
}, function(err) {
...
});
Run Code Online (Sandbox Code Playgroud)
所以两者之间的区别是一行。
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |