承诺在callback中给出未定义的结果
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中获取未定义的值。 所以这意味着callback不传递数据。 如何有效地将数据传递给进一步的目的
如果你想让你的函数实际返回promise,那么改变它:
exports.fileUpload = function (fileName) { new Promise(function(resolve, reject) { // ... }); };
对此:
exports.fileUpload = function (fileName) { return new Promise(function(resolve, reject) { // ... }); };
没有return
语句,你创build的promise就不会被你的函数返回。
但即使如此,你将无法像这样使用它:
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));
你需要链接到承诺.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
被设置在哪里。