2017-03-29 20 views
1

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ここで、私はにconsole.logで未定義の値を取得していますされて何が起こっているのか

var awsUpload = require('./../config/fileUpload.js'); 

var userData = function(req, res) { 
console.log("true/false" + awsUpload.fileUpload(profile_image)); 

を未定義の結果になります。コールバックがデータを渡していないことを意味します。これに

exports.fileUpload = function (fileName) { 
    new Promise(function(resolve, reject) { 
     // ... 
    }); 
}; 

:どのように私はあなたが実際に約束を返すように関数がその後、これを変更したい場合は、さらに目的

+1

これは、あなたが約束と非同期の概念を誤解しているようです。 'awsUpload.fileUpload(profile_image).then(data => {console.log(" true/false "+ data)});'のようなことをする必要があります。 Promiseを返す必要があります – FirstOne

+0

あなたの 'fileUpload'関数は何も返しません。 – jcaron

答えて

0

ために効果的にデータを渡すことができ

exports.fileUpload = function (fileName) { 
    return new Promise(function(resolve, reject) { 
     // ... 
    }); 
}; 

returnの文がなければあなたが作成していることをあなたの関数によって返されることはないと約束します。あなたが使用している場合、これを

awsUpload.fileUpload(profile_image).then(result => { 
    console.log("true/false" + result); 
}); 

または:

それでもあなたはこのようにそれを使用することはできません。

console.log("true/false" + awsUpload.fileUpload(profile_image)); 

あなたはこのようなものを使用する必要がありますasync/await、あなたはasync機能の中にいる:

console.log("true/false" + await awsUpload.fileUpload(profile_image)); 
1

.thenと約束してログに記録する必要があります。

var userData = function (req, res) { 
    awsUpload.fileUpload(profile_image).then(data => { 
    console.log("true/false" + data); 
    }); 
} 

あなたはasync/awaitをサポートする環境で作業している場合、あなたは、単にこのビット以上を行うことができます。まず、あなたがreturn約束

return new Promise(function(resolve, reject) { 

確認後、あなたが行うことができます

var userData = async function (req, res) { 
    console.log("true/false" + await awsUpload.fileUpload(profile_image)); 
}; 

これはプロミスを返すことに注意してください。

profile_imageが設定されている場所は表示されません。

関連する問題