2016-02-11 8 views
5

से लौटाए गए वादे से मूल्य प्राप्त करना मैं प्रस्तावित एसिंक/प्रतीक्षा वाक्यविन्यास में उपयोग कर रहा हूं और कुछ अनजान व्यवहार है। "Async" फ़ंक्शन के अंदर, मैं सही स्ट्रिंग को console.log कर सकता हूं। हालांकि, जब मैं उस स्ट्रिंग को वापस करने का प्रयास करता हूं, तो इसके बजाय, यह एक वादा करता है।एसिंक फ़ंक्शन

इस प्रविष्टि की जांच: async/await implicitly returns promise?, यह स्पष्ट है कि कोई भी "async फ़ंक्शन()" एक वादा वापस करेगा, एक मूल्य नहीं। कोई बात नहीं। लेकिन आप मूल्य तक पहुंच कैसे प्राप्त करते हैं? यदि एकमात्र उत्तर "कॉलबैक" है, तो यह ठीक है - लेकिन मैं उम्मीद कर रहा था कि कुछ और सुरुचिपूर्ण हो सकता है।

makeHash('password').then(hash => console.log(hash)); 

या निश्चित रूप से, आप बस एक और async समारोह है कि इसके लिए इंतजार कर रहा है कर सकते हैं:

it('should generate a hash', async function(){ 
    var hash = await makeHash('password'); 
    console.log("inside test: ", hash); 
    should.exist(hash); 
}) 

है

// src 
// ========================================== 

require("babel-polyfill"); 
var bcrypt = require('bcrypt'); 

var saltAndHash = function(password){ 
    var hash; 
    return new Promise(function(resolve, reject){ 
    bcrypt.genSalt(10, function(err, salt) { 
     bcrypt.hash(password, salt, function(err, hash) { 
      resolve(hash); 
     }); 
    }); 
    }) 
} 

var makeHash = async function(password){ 
    var hash = await saltAndHash(password); 
    console.log("inside makeHash", hash); 
    return(hash); 
} 

// from test suite 
// ========================================== 

describe('Bcrypt Hashing', function(){ 

    it('should generate a hash', function(){ 
    var hash = makeHash('password'); 
    console.log("inside test: ", hash); 
    should.exist(hash); 
    }) 

}) 

// output to console: 
// ========================================== 

    inside test: Promise { 
    _d: 
    { p: [Circular], 
    c: [], 
    a: undefined, 
    s: 0, 
    d: false, 
    v: undefined, 
    h: false, 
    n: false } } 

    inside MakeHash $2a$10$oUVFL1geSONpzdTCoW.25uaI/LCnFqeOTqshAaAxSHV5i0ubcHfV6 

    // etc 
    // ========================================== 
    // .babelrc 
    { "presets": ["es2015", "stage-0", "react"] } 
+0

@ जोचिम इक्सक्सन: केवल * अंदर * एक 'async' फ़ंक्शन। –

उत्तर

9

हाँ, आप केवल यह एक कॉलबैक का उपयोग कर उपयोग कर सकते हैं एक वादे के परिणाम को सुलझाने के लिए कोई रास्ता नहीं है।

संबंधित मुद्दे