gpt4 book ai didi

javascript - 关于 AngularJS 中的异步、 promise 和链接的问题

转载 作者:行者123 更新时间:2023-12-01 03:52:28 26 4
gpt4 key购买 nike

我一直在尝试自己研究 Promise、异步调用的基础知识以及如何在 AngularJS 中链接它们。目前,我正在维护一个喜欢在任何地方使用它们的应用程序,作为一个新手,至少可以说,它们真的让人不知所措。

首先,我在服务器端 (node.js) 中有这段代码,用于检索经理的直接报告列表。以前的开发人员就是这样做的,所以我用它作为指导:

exports.findDirectReports = function (req, res) {
var empnum = req.params.empnum;

queries.getDirectReports(empnum)
.then(function (users) {
return res.json(users);
})
.catch(function (err) {
handleError(res, err);
});
};

我理解的内容(或认为我理解的内容):

  1. queries.getDirectReports 将首先执行并返回列表作为 promise 。
  2. 已解决的 Promise 将在 then() 内返回。
  3. return res.json(users) 结果将被传回给调用它的人以在其他操作中使用。

我的问题是得到已解决的 promise 。我知道我不会立即获得结果,因为它是异步的。但我有一个 find() 使用这些结果作为条件,每次检查结果时我总是得到 null[]

  1. 有办法立即获得它们吗?
  2. 如果没有,我如何在结果准备好后立即执行其他函数?

这是有问题的函数(也是服务器端node.js):

exports.downloadEmployee = function (req, res) {
/*
"queries" - alias for another server-side node.js (not really sure what to call
this exactly) that contains the entire getDirectReports fxn.
*/

queries.getDirectReports(empnum)
.then(function (users) {
EmployeeInfo.find({}, function (err, results) {
var tempCtr = [];
if (err) { return err; }

/*
Use results of getDirectReports here as condition
where if employee exists, program will execute
_.forEach below.
*/

_.forEach(results, function (item) {
tempCtr.push({
employeeID: item.employeeID,
employeeName: item.employeeName
});
});
return res.json(tempCtr);
});
})
.catch(function (err) {
handleError(res, err);
});
}

我在 SO 的某个地方看到我需要利用回调,但我不太明白如何做。一些代码示例与我之前尝试过的代码示例类似(但不起作用)。

任何答案将不胜感激。

谢谢。

最佳答案

您需要从函数返回一个 promise

exports.downloadEmployee = function (req, res) {
return queries.getDirectReports(empnum)
.then(function (users) {
...
return res.json(user);
})
.catch(function (err) { ... });
}

Promise 是异步的,所以没有办法让它“立即”解析,您需要处理调用该函数的 Promise 的解析。

关于javascript - 关于 AngularJS 中的异步、 promise 和链接的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43062589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com