我是一个AngularJS承诺新手并且对如何实现它感到非常沮丧。我希望有人可以帮助我。
我有以下客户端代码:
// Pass result to ng-csv directive.
$scope.generateEmployeeData = function () {
$scope.employeename = empName;
$http.get('/api/employee-information/download').then(function (data) {
console.log(data);
return data;
}).catch(function (err) {
ToastFactory.error({
title: "Oops!",
text: "Something went wrong while downloading employee data.",
icon: "exclamation-sign"
});
});
}
......和ff。服务器端代码:
// Download Employee data (.../api/employee-information/download)
exports.downloadEmployee = function (req, res) {
var tempCtr = [];
var dlPromise = EmployeeInfo.find({}, function (err, results) {
var tempCtr = [];
if (err) { return err; }
console.log("dlpromise in");
return results;
});
q.all(dlPromise)
.then(function (results) {
_.forEach(results, function (item) {
tempCtr.push({
employeeID: item.employeeID,
employeeName: item.employeeName
});
});
});
console.log("tempctr out");
console.log(tempCtr);
return res.json(tempCtr);
}
当我检查我的日志时,我看到在console.log("tempctr out")
之前先调用console.log("dlpromise in")
,我知道它是因为该过程是异步的。这就是我使用q.all
(基于this SO answer)的原因,因为我认为它会在进入dlPromise
之前先解决then()
。但它没有用。我错过了什么?我是否理解AngularJS'承诺一般会有偏差吗?
我一直试图解决这个问题很长一段时间没有成功。请帮忙。
谢谢。
更新:我在console.log("dlpromise in");
之后添加了一个console.log。这是结果:
dlpromise in
[ { _id: 58c7b885db0afd48ee427a73,
employeeID: '12349876',
employeeName: 'Tester'}]
答案 0 :(得分:1)
我对服务器端代码并不熟悉,但我假设它是NodeJS?
我认为您可以将代码更改为某些内容(假设res.json(tempCtr)发送响应数据):
exports.downloadEmployee = function (req, res) {
EmployeeInfo.find({}, function (err, results) {
var tempCtr = [];
if (err) { return err; }
_.forEach(results, function (item) {
tempCtr.push({
employeeID: item.employeeID,
employeeName: item.employeeName
});
});
console.log("tempctr out");
console.log(tempCtr);
res.json(tempCtr);
});
}