gpt4 book ai didi

javascript - 递延的反 promise 模式不明确的例子

转载 作者:行者123 更新时间:2023-11-29 10:38:35 25 4
gpt4 key购买 nike

来自

https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns

他说的是什么 promise ?

myApp.factory('Configurations', function (Restangular, MotorRestangular, $q) {
var getConfigurations = function () {
//Just return the promise we already have!
return MotorRestangular.all('Motors').getList().then(function (Motors) {
//Group by Cofig
var g = _.groupBy(Motors, 'configuration');
//Return the mapped array as the value of this promise
return _.map(g, function (m) {
return {
id: m[0].configuration,
configuration: m[0].configuration,
sizes: _.map(m, function (a) {
return a.sizeMm
})
}
});
});
};

return {
config: getConfigurations()
}

});

promise 在哪里?对我来说,使用他的模式看起来更像是一种反模式。除了单词 then 之外,我在这段代码中看不到任何 promise ,没有什么让我想到 promise 。

那么 return MotorRestangular... 实际上返回了什么?

最佳答案

要记住的一件事是,resolvereject 函数都返回一个promise。换句话说,它已经为你 promise 了。即使您没有明确地从 resolve 返回某些内容,您得到的也是一个已解决且值为 undefined 的 promise。

在您的示例中,MotorRestangular.all('Motors').getList() 返回一个 promise ,并且在 resolve 函数中, 中的第一个参数 then ,返回另一个 resolved promise,它将获取 _.map 函数的结果作为输入。就像:

function YourCtrl(Configurations) {
Configurations.getConfiguration().then(function(resultOfMap) {
// use resultOfMap here
})
}

注意:不要被 resolvedonFulfilled 搞糊涂了。它们有点相同,但前者用于 deferred 对象,后者来自 Promise 规范。

关于javascript - 递延的反 promise 模式不明确的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32855250/

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