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.log
和return
语句在数据库操作完成之前完成。 你应该返回里面的值。
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的数组值(如果没有错误发生的话)