gpt4 book ai didi

javascript - 封闭的返回值和 promise

转载 作者:行者123 更新时间:2023-11-30 16:36:43 24 4
gpt4 key购买 nike

我已经没有办法处理这种嵌套的返回情况。我试图找出通过 promise 从后端检索的数组是否包含数组中的元素。这有效:

    function isNameTaken() {
var duplicateFound = 0;
for (var i = 0; i < $scope.entities.length; i++) {
if ($scope.entities[i].name === $scope.myName) {
duplicateFound = 1;
}
}
return duplicateFound;
}

我想对此进行调整,以便在比较之前刷新数组。我有一种检索它的方法,它解析为一个 promise 。现在,我可以将整个东西包装到一个 .then 包装中,但是我无法从外部访问我的 duplicateFound 变量以访问内部函数的异步特性。

这是我想要开始工作的:

    function isNameTaken() {
return loadEntities().$promise.then(function(entities) {
var duplicateFound = 0;
for (var i = 0; i < entities.length; i++) {
if (entities[i].name === $scope.myName) {
duplicateFound = 1;
}
}
return duplicateFound;
});
}

当 promise 解析时,内部部分完美地工作,但作为一个整体的函数总是解析为 true,因为 return loadEntities() 部分不会将我封闭的 return 的值传回给我,但是 promise 本身。没有它,它总是解析为 false(我认为它是未定义的)。

简而言之。第一个有效。如何在此方法之外获取 duplicateFound 的值?

最佳答案

the function as a whole always resolves to true

不,它不返回 true。它确实返回一个 bool 值的 promise ,该 promise 可能true(或以false或完全拒绝)实现。这个 promise 当然是一个真值,所以你不能在 if 条件中使用它。

相反,您必须调整调用代码以预测 promise ,并让它在检查值之前等待解决方案。当然,这会使您的整个函数(以及调用它的所有函数)异步。

return isNameTaken().then(function(taken) {
if (taken)

else

}); // yields another promise for the result of the callback

关于javascript - 封闭的返回值和 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32614338/

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