gpt4 book ai didi

javascript - 等待一个 promise ?

转载 作者:IT王子 更新时间:2023-10-29 03:19:17 26 4
gpt4 key购买 nike

我有以下 angularjs 代码:

$scope.clients = commonFactory.getData(clientFactory.getClients());
if ($scope.clients.length > 0) {
$scope.sampleForm.ClientId = $scope.clients[0].ClientId;
}

还有commonFactory中的getData函数:

factory.getData = function (method) {
method.then(function (response) {
return response.data;
}, function (error) {
$rootScope.alerts.push({ type: 'error', msg: error.data.ExceptionMessage });
});
};

问题是 $scope.clients.length 由于异步调用而到达该行时未定义。

有没有办法在我知道 $scope.clients 已分配之前不进行长度检查?我看过这样的东西:

$scope.clients = commonFactory.getData(clientFactory.getClients()).then(function () {
if ($scope.clients.length > 0) {
$scope.sampleForm.ClientId = $scope.clients[0].ClientId;
}
});

尝试链接我的 then promise ,但没有骰子......这里的目标是使用 getData 方法来避免一堆用于捕获错误的样板代码......也许我会关于这个错误?

最佳答案

这是 promises 所针对的最基本的情况。您只需要在开始异步操作时用 var deferred = $q.defer() 做出 promise ,在异步操作时用 deferred.resolve(result) 解决 promise 操作完成,并在你的函数中返回 deferred.promise。 Angular 的异步方法在内部执行此操作并返回 promise ,因此您可以只返回相同的 promise ,而不是使用 $q.defer() 创建新的 promise 。您可以将 .then 附加到返回 promise 的任何内容。此外,如果您从 then 函数返回一个值,该值将被包装在一个 promise 中,以便 then 链可以继续

angular.module('myApp', [])

.factory('myService', function($q, $timeout, $http) {
return {
myMethod: function() {
// return the same promise that $http.get returns
return $http.get('some/url');
}
};
})

.controller('myCtrl', function($scope, myService) {
myService.myMethod().then(function(resp) {
$scope.result = resp.data;
});
})

这里还有一个更有趣的链接:

.factory('myService', function($q, $timeout, $http) {
return {
myMethod: function() {
// return the same promise that $http.get returns
return $http.get('some/url').then(function() {
return 'abc';
});
}
};
})

.controller('myCtrl', function($scope, myService) {
myService.myMethod().then(function(result) {
console.log(result); // 'abc'
return someOtherAsyncFunc(); // for example, say this returns '123'
}).then(function(result) {
console.log(result); // '123'
});
})

关于javascript - 等待一个 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752222/

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