【发布时间】:2014-08-20 18:09:28
【问题描述】:
我正在使用 nodeJS,运行 express4 框架来创建 API。我正在使用 RSVP.js 进行承诺。
worker.getFamilies 由外部模块调用,此处未反映。调用者期望返回一个带有结果的对象。
worker.getFamilies 内部: - 我正在使用 mongoose 查询 mongoDB(有效,我们得到结果)
我正在使用一个 promise 从 mongoose 获取可用的响应对象。这样可行。
-
然后我尝试返回 JSON.stringify(results);给 worker.getFamilies 的调用者,这不起作用。调用者返回“未定义”。请帮忙。
var worker = exports; var RSVP = require('rsvp'); var getFamiliesFromDB = function(DBconnection){ var promise = new RSVP.Promise(function(resolve, reject){ DBconnection.find({} ,{limit:10, sort: [['_id',-1]]}).toArray(function(e, results){ console.log('results:', results); resolve(results); }); }); return promise; } worker.getFamilies = function(DBConnection){ getFamiliesFromDB(DBConnection).then(function(results){ //this works console.log('here are the fams from the promise', results); //this doesnt work like i want it to return JSON.stringify(results); }); };
【问题讨论】:
-
worker.getFamilies的调用者可以接受promise吗?如果没有,你必须强制请求是同步的。 -
真的吗?在我看来,当我们返回 JSON.stringify(results); 时,承诺已经完成。我们现在不是只返回一个“正常”对象吗?
-
@quelquecosa The result of an asynchronous task can't really be
returned. 此类任务是面向事件的,return将在事件发生之前采取行动,或者在这种情况下,应用于回调function(results)而不是worker.getFamilies(). -
回到
worker.getFamilies内部:return getFamiliesFromDb(...)...
标签: javascript node.js express promise rsvp.js