gpt4 book ai didi

javascript - 为什么 .then() 不等待 promise ?

转载 作者:行者123 更新时间:2023-11-28 18:44:52 25 4
gpt4 key购买 nike

我目前正在开发一个 Angular 项目,而且我对它还很陌生。

我不明白,为什么 .then() 函数不等待 promise ?

我认为它必须与我的 getAllStats() 函数中只有一个 $q.defer() 相关吗?当我尝试 console.log("testing: ", data); (在底部)时,它只记录出一个空数组。有人可以帮我吗?

这是我的代码:

function getAllStats(dataArray, nameOfFile) {
var defer = $q.defer();
var promises = [];


for (index in dataArray) {
if (dataArray[index].indexOf('test') > -1 ) {
getStats(nameOfFile).then(function (data) {
promises.push();
});
}
}

function last() {
defer.resolve(promises);
}

$q.all(promises).then(last);
return defer.promise;
};

function getStats(nameOfFile) {
var defer = $q.defer();
$http.get(nameOfFile).success(function (data) {
defer.resolve(data);
});
return defer.promise;
};

getAllStats('test.txt').then(function(data) {
console.log("testing: ", data);
});

最佳答案

请参阅此代码中的注释:

function getAllStats(dataArray, nameOfFile) {
var promises = [];
// using `for (index in dataArray) {` is a bad idea unless
// dataArray is a non-array object
for (var index = 0; index < dataArray.length; index++) {
if (dataArray[index].indexOf('test') > -1 ) {
// Here is the trick, store the promise itself,
// don't try to subscribe to it here
promises.push(getStats(nameOfFile));
}
}
return $q.all(promises);
};

function getStats(nameOfFile) {
// http.get already returns a promise, see explicit promise creation antipattern
return $http.get(nameOfFile).then(function(r) { return r.data; });
};

getAllStats('test.txt').then(function(data) {
console.log("testing: ", data);
});

引用文献:

Deprecation Notice

The $http legacy promise methods success and error have been deprecated. Use the standard then method instead. If $httpProvider.useLegacyPromiseExtensions is set to false then these methods will throw $http/legacy error.

see: $http

关于javascript - 为什么 .then() 不等待 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35543171/

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