fileUpload.js
var Uploader = require('s3-image-uploader');
var express = require('express');
var config = require('./../config.js');
var Promise = require('promise');
var uploader = new Uploader({
aws: {
key: config.awsKey,
secret: config.awsSecret
},
websockets: false
});
exports.fileUpload = function(fileName) {
new Promise(function(resolve, reject) {
uploader.upload({
fileId: 'someUniqueIdentifier',
bucket: 'quflip',
source: './public/images/' + fileName,
name: fileName
},
function(data) { // success
console.log('upload success:', resolve);
resolve(data);
},
function(errMsg, errObject) { //error
reject(false);
});
});
};
logintest.js
var awsUpload = require('./../config/fileUpload.js');
var userData = function(req, res) {
console.log("true/false" + awsUpload.fileUpload(profile_image));
这里发生了什么,我在console.log中得到了未定义的值。所以这意味着回调没有传递数据。如何有效地传递数据以实现进一步的目的
答案 0 :(得分:1)
您需要使用.then
链接到承诺并在那里执行日志。首先,确保return
承诺
return new Promise(function(resolve, reject) {
然后,你可以这样做:
var userData = function (req, res) {
awsUpload.fileUpload(profile_image).then(data => {
console.log("true/false" + data);
});
}
如果您在支持async
/ await
的环境中工作,则可以更简单地执行此操作:
var userData = async function (req, res) {
console.log("true/false" + await awsUpload.fileUpload(profile_image));
};
请记住,这将返回一个承诺。
我不知道profile_image
设置在哪里。
答案 1 :(得分:0)
如果您希望您的函数实际返回promise,请更改此:
exports.fileUpload = function (fileName) {
new Promise(function(resolve, reject) {
// ...
});
};
到此:
exports.fileUpload = function (fileName) {
return new Promise(function(resolve, reject) {
// ...
});
};
如果没有return
语句,您正在创建的承诺将不会被您的函数返回。
但即便如此,你也无法像这样使用它:
console.log("true/false" + awsUpload.fileUpload(profile_image));
你必须使用这样的东西:
awsUpload.fileUpload(profile_image).then(result => {
console.log("true/false" + result);
});
或者,如果您使用的是async
/ await
并且您在async
函数内部,那么这就是
console.log("true/false" + await awsUpload.fileUpload(profile_image));