gpt4 book ai didi

javascript - Promise.all 然后 (js)

转载 作者:行者123 更新时间:2023-12-03 03:59:08 24 4
gpt4 key购买 nike

我对整个 promise 的事情还很陌生,所以我可能做错了一些事情。如果有人可以启发我,欢迎所有建议/信息。

所以这是我想要完成的代码(经过简化,对于理解目的来说绝对不是最佳的):

// Get data from webservice    
$scope.sendGet(id, option).then(function (response){
// Fill the model
$scope.model[option] = response.data;
}).then(function(){
if(option == $scope.PROFILES){

var p1 = new Promise((resolve, reject) => {
$scope.getX1($scope.model[option][0][0].id);
});
var p2 = new Promise((resolve, reject) => {
$scope.getX2($scope.model[option][0][0].id);
});
var p3 = new Promise((resolve, reject) => {
$scope.getX3($scope.model[option][0][0].id);
});
var p4 = new Promise((resolve, reject) => {
$scope.my_data = JSON.parse($scope.model[option][0][0].list);
});
// Execute all promises to get the data
Promise.all([p1,p2,p3,p4]).then(() => {
debugger;
// Do some validation and extra formatting on the data we just downloaded
$scope.update();
});
}
}).then(function(){
// Display the data to the user
$scope.move(option, 1, $scope.EDITING);
});

这里的预期行为是:

获取数据 -> 有了这些数据,使用 id 从 4 个来源获取数据(4 个 promise ) -> 下载所有数据后,更新一些引用并进行一些清理 -> 移动(这是更新的方法) View 并做一些其他与 UI 相关的事情)

但由于某种原因,debugger;$scope.update(); 永远不会被执行。我尝试将它们移动到与 $scope.move() 函数相同的 .then 中,但它会在检索 Promise.all 中的数据之前执行。

最佳答案

您永远不会解决 Promise 1-4,因此 Promise.all(...).then 的“成功回调”永远不会触发。在为每个 Promise 的构造函数提供的回调中,使用每个 Promise 获取的数据调用 resolve

// ...
var p1 = new Promise((resolve, reject) => {
resolve($scope.getX1($scope.model[option][0][0].id));
});
// ...

这就是从 Promise“返回”数据的方式。请参阅this article了解详情。

编辑:如果$scope.getX1本身返回一个Promise,您可以简单地将其分配给p1,即:

var p1 = $scope.getX1($scope.model[option][0][0].id);

关于javascript - Promise.all 然后 (js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44808649/

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