gpt4 book ai didi

javascript - 处理来自多个数据源的数据

转载 作者:行者123 更新时间:2023-12-03 07:29:51 33 4
gpt4 key购买 nike

这里我有一个简单的 Angular 应用程序,其中包含两项服务,一项获取狗狗币公共(public)地址的余额,第二项获取来自两个不同来源的狗狗币 Btc 价格。

服务:

angular.module('AppName', ['ngResource'])

.factory('DogeBalance', ['$resource', function ($resource) {
return $resource("https://dogechain.info/api/v1/address/balance/:address");
}])

.factory('DogePrice', ['$resource', function ($resource) {
return $resource("https://chain.so/api/v2/get_info/DOGE");
}])

和 Controller :

.controller('TwoController', function($scope, DogeBalance, DogePrice){

$scope.wallets = [
{ id: 0, type: 'doge', address: 'DT2rmMrutwzdZ8EXwzj4QFdcL6DtvGGkci'},
{ id: 1, type: 'doge', address: 'DMoonjyH1aHLZc1kksmikBUhjXromn1ZN4'}
];

var price = DogePrice.get();
$scope.totalBalance = parseFloat(0);

price.$promise.then(function(data) {
$scope.price = data.data.price;
//aggregate balance on all the addresses
for (i in $scope.wallets){
var balance = DogeBalance.get({address: $scope.wallets[i].address});
balance.$promise.then(function(data) {
$scope.totalBalance += parseFloat(data.balance);
$scope.totalValueBtc = $scope.totalBalance * $scope.price;
});
}
});
});

我需要计算 $scope.wallets 中所有狗狗币地址余额的 BTC 总值(value)。正如您在 Controller 代码中看到的那样,我以嵌套方式处理了两个 api 调用的 promise 。

on Jsfiddle

我的问题是否有更好的方法来处理多个 promise 的数据?

如果我在数据处理之前有 5 个 promise 需要解决,每个 promise 都来自不同的来源,该怎么办?我需要将它们中的每一个都放在前一个的 Promise 回调中吗?

最佳答案

我建议将您的逻辑放入一个可以从任何地方调用的函数中,以总结数组中所有钱包的值(value)。

首先将余额作为钱包对象的一部分。

$scope.wallets = [
{ id: 0, type: 'doge', address: 'DT2rmMrutwzdZ8EXwzj4QFdcL6DtvGGkci', balance: {}},
{ id: 1, type: 'doge', address: 'DMoonjyH1aHLZc1kksmikBUhjXromn1ZN4', balance: {}}
];

然后你就可以了

$scope.getBalance = function () {
var tempBalanace = 0;
angular.forEach($scope.wallets, function (value, key) {
tempBalance += value.balance * $scope.price;
});
$scope.totalBalance = tempBalance;
};

所以现在你可以从所有的 Promise 中调用 $scope.getBalance() ,总余额将相应更新。您可能需要添加一些额外的逻辑来处理余额或价格为空(仍在等待响应)的情况,但每当更新任何记录时,这将强制使用最后收到的值更新总体余额。

关于javascript - 处理来自多个数据源的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848037/

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