如何使用npm synchronize在node.js中的variables中返回callback

我正在使用nodejs,我想避免多个嵌套的callback。 我如何使用synchonize来做到这一点? 更确切地说,我如何从请求的callback中将pubkeysObj返回到一个variables中,并在脚本的其余部分中使用它?

var sync = require('synchronize'); var fiber = sync.fiber; var await = sync.await; var defer = sync.defer; try { fiber(function() { console.log('before findKeyPair'); var pubkeysObj2 = await( findKeyPair( defer() ) ); console.log('after findKeyPair pubkeysObj2: ' + pubkeysObj2); console.log('before makeKeyPairs'); var pubkeyArray2 = await( makeKeyPairs( pubkeysObj2, defer() ) ); console.log('after makeKeyPairs pubkeyArray2: ' + pubkeyArray2); }); } catch(err) { console.log('err: ' + err); } function findKeyPair(){ Keypair.find({}, {pubkey: 1, _id: 0}, function(err, pubkeysObj) { //mongoose db if (err) res.redirect('/'); console.log('inside findKeyPair pubkeysObj: ' + pubkeysObj); return pubkeysObj; // ????????? }); } function makeKeyPairs(pubkeysObj3){ console.log('inside makeKeyPairs: pubkeysObj3:' + pubkeysObj3); var pubkeyArray = []; pubkeyArray = Object.keys(pubkeysObj3).map(function(_) { return pubkeysObj3[_].pubkey; }) return pubkeyArray; // ???? } 

输出是:

 before findKeyPair inside findKeyPair pubkeysObj: { pubkey: 'n2eTmd37KTGhRZNJsf9tfVdCG1YejciETu' },{ pubkey: 'n2cBvz74bMGUf35gAdnSksbBnW1m4HfCmg' } 

你会开放使用wait.for吗?

我使用“wait.for”重写了我的代码,现在我可以从数据库接收对象KeypairObj,并将它传递给下一个函数makeKeyPairs。 在这个函数里我可以打印我的数组(pubkeyArray),但是我不能得到返回的值(pubkeyArray2),函数findKeyPair的最后一行没有被执行。

这里是新的代码:

 var wait = require('wait.for'); var Keypair = require('./app/models/Keypair'); try { // launch a new fiber wait.launchFiber(findKeyPair, Keypair); } catch(err) { console.log('err' + err); } function findKeyPair(Keypair){ var KeypairObj = wait.forMethod(Keypair,'find', {}, {pubkey: 1, _id: 0}); console.log('1: ' + KeypairObj.toString()); var pubkeyArray2 = wait.for(makeKeyPairs, KeypairObj); console.log('3: pubkeyArray2: ' + pubkeyArray2); // not executed !!! } function makeKeyPairs(pubkeysObj3){ pubkeyArray = Object.keys(pubkeysObj3).map(function(_) { return pubkeysObj3[_].pubkey; }); console.log('2: pubkeyArray: ' + pubkeyArray); } 

和输出:

 1: { pubkey: 'n2eTmd37KTGhRZNJsf9tfVdCG1YejciETu' },{ pubkey: 'n2cBvz74bMGUf35gAdnSksbBnW1m4HfCmg' } 2: pubkeyArray: n2eTmd37KTGhRZNJsf9tfVdCG1YejciETu,n2cBvz74bMGUf35gAdnSksbBnW1m4HfCmg