gpt4 book ai didi

javascript - 如何正确使用 Promise 和回调函数

转载 作者:行者123 更新时间:2023-12-02 15:58:35 25 4
gpt4 key购买 nike

我有这个服务,它使用回调异步返回学生列表:

    studentModule.factory('StudentService', function (DB_URL) {
return {
getAllStudents: function (callback) {
var Datastore = require('nedb'),
path = require('path');
db = {};
db.students = new Datastore({
filename: DB_URL + '/students.db',
autoload: true
});
db.students.find({}, function (err, stds) {
callback(stds);
});
}; //end return

我在 Controller 中使用它的旧方法:

StudentService.getAllStudents(function(sts) {
$scope.students = sts;
$scope.$apply();//notify angular about the change
});

这对我有用,但现在我想使用一些最佳实践。我需要在到达 Controller 之前解析 route 的结果,这是我所做的:

.state('payment', {
url: '/payment',
templateUrl: 'frontend/components/payment/views/payment.html',
controller: 'PaymentController',
resolve: {
students: function (StudentService, $q) {
var defer = $q.defer();
defer.promise.then(function () {
StudentService.getAllStudents(function (sts) {
alert(JSON.stringify(sts));
return sts;
});
})
defer.resolve();
}
}
})

警报成功从路线返回数据,但未从 Controller 返回数据 - 我在 Controller 中收到未定义:

paymentModule.controller('PaymentController', function($scope,students) {
alert(JSON.stringify(students));

任何帮助将不胜感激!

最佳答案

您应该始终返回一个 promise 来解析函数,并且在创建自己的 promise 时,您应该使用需要传递的数据来解析它。

.state('payment', {
url: '/payment',
templateUrl: 'frontend/components/payment/views/payment.html',
controller: 'PaymentController',
resolve: {
students: function (StudentService, $q) {
var defer = $q.defer();
//defer.promise.then(function () {
StudentService.getAllStudents(function (sts) {
//alert(JSON.stringify(sts));
//return sts;
defer.resolve(sts);
});
//})
//defer.resolve();
return defer.promise
}
}
})

关于javascript - 如何正确使用 Promise 和回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31392377/

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