node.js函数返回未定义的值

我有一个问题,从数据库与node.js获得restaurantname,它似乎必须做一些callback参数,但我不能find我的情况的解决scheme,希望你们中的一个可以帮助我。

我做了一个从数据库中获取餐厅名称的函数。 第一个控制台日志行给出了正确的retvalue,第二个给出了未定义的,我怎么写代码,以便返回值是餐厅的名称?

亲切的问候,罗伯特

function restaurantName(id) { var retvalue; try { F.model('restaurant').load(id).then(function (restaurant) { retvalue = restaurant.Name; console.log('restaurantName 1(' + id + ')' + retvalue); }) } catch (err) { retvalue = 'Error'; } console.log('restaurantName 2(' + id + ')' + retvalue); return retvalue; }; 

从数据库获取数据的函数是asynchronous的,因此第二个console.logreturn语句在数据库操作完成之前完成。 你应该返回里面的值。

 function restaurantName(id) { var retvalue; return F.model('restaurant').load(id).then(function (restaurant) { retvalue = restaurant.Name; console.log('restaurantName 1(' + id + ')' + retvalue); return retvalue; }).catch(function(error){ return 'Error'; }); }; 

而这个函数也会返回一个promise ,所以你必须这样调用它

 restaurantName(1).then(function(result){ console.log(result); // result would be retValue or 'Error' }); 

编辑

你在回答下面的评论中提到的第二个问题也涉及到承诺如何工作。 在这种情况下,我build议你使用Promise.all方法来解决所有作为parameter passing的promise是什么时候解决的

 let promises = []; snapshot.forEach(u => { let item = u.val(); item.key = u.key; promises.push(restaurantName(item.restaurant).then(function(result){ item.restaurantName = result; return item; })); }); Promise.all(promises).then(result => { console.log(result); // here you get array of items }); 

这里发生的是你创build了一个用给定值parsing的promise数组(在这种情况下每次都是item对象)。 当你将这个数组传递给Promise.all方法时,它将parsing为每个单独的promiseparsing的数组值(如果没有错误发生的话)