2017-02-17 41 views
0

這是我試圖寫的函數的測試。初學者異步值傳遞和javascript中返回

var chai = require('chai'); 
var doLater = require('../05-callback'); 
var expect = chai.expect; 

describe('05-callback', function() { 
it('Can get secret number', function (done) { 
    doLater(function (secret) { 
    expect(secret).to.equal(1337); 
    done(); 
    }); 
}); 
}); 

我已經編寫了將消息異步登錄到控制檯的代碼,但是,此代碼不會異步返回1337值。

function doLater(secret) { 
var code = 1337; 
(function setImmediate(code) { 
    console.log("I will be executed immediately"); 
    return code; 
})(code); 
setTimeout(function secret(code) { 
    console.log("I will be executed in 2 seconds."); 
    return code; 
}, 2000); 
} 

請讓我知道,如果這篇文章不清楚,我會編輯它。請原諒我,如果這篇文章是多餘的,我發現的這篇文章是爲我提高的。感謝您的幫助!

回答

2

爲了做你想做的事情,你需要使用回調。例如:

function doLater(callback) { 
    setTimeout(function(){ 
    //after 2 seconds call the callback 
    return callback(1337); 
    }, 2000) 
} 

//pass as param a function that will be called 
doLater(function(result) { 
    console.log(result) //1337 
})