我有解决检索某些产品的承诺的方法
global.getProducts().then(function (prodPromised) {
对于每个prodPromised,我有一个类别ID,但我也想要类别名称。 所以,我创建了一个promises数组,我在其中为每个Product指定了Category Name。
var products = [];
for (var i = 0; i < prodPromised.length; i++) {
promises.push(self.createCatName(prodPromised[i]));
}
之后我解决了承诺......
Promise.all(promises).then((products) => {
...我将它们循环进行某些操作
for (var i = 0; i < products.length; i++) {
问题在于我想将数组产品存储在“上”位置,以便将其用于另一种方法。
我想有一些与吊装相关的东西,但我不明白该怎么做: - (
由于
答案 0 :(得分:0)
您可以创建一个分配承诺的变量。 请记住,您必须继续使用异步代码!
let products = null;
global
.getProducts()
.then(function (prodPromised) {
products = prodPromised;
})
这不起作用:
let products = null;
global
.getProducts()
.then(function (prodPromised) {
products = prodPromised;
});
products.forEach( function( product ) {
// do stuff
} );
但这应该:
let products = null;
global
.getProducts()
.then(function (prodPromised) {
products = prodPromised;
})
.then(function() {
products.forEach( function( product ) {
// do stuff
} );
});
或者,这是我自己的首选解决方案,因为您不必在范围之外为其创建变量。您从.then()
回调中返回的任何内容都将在下一个中提供:
global
.getProducts()
.then(function (prodPromised) {
// do first stuff
return prodPromised;
})
.then(function (prodPromised) {
// do second stuff.
});
答案 1 :(得分:0)
如果createCatName是同步功能,您可以执行以下操作
const products = global.getProducts().then(
products=>
products.map(self.createCatName)
);
如果createCatName是异步函数,则执行此操作
const products = global.getProducts().then(
products=>
Promise.all(
products.map(self.createCatName)
)
);
如果您想使用产品,那么您可以使用以下产品的承诺:
products.then(
products=>{
//use products here
}
).catch(
err=>console.warn("Something went wrong getting products:",err)
);
价值产品不是实际的产品清单,而是将来可能会或可能不会提供的产品清单(如果出现错误,则可能不会)。
因此,如果您想要访问产品,您始终必须将其作为承诺访问,您可以使用异步等待语法,但如果您不知道承诺是什么,那么请先了解它。
异步函数已经等待,但实际上会立即返回一个promise,因此异步函数之外的任何内容都会立即传递一个promise并且不会得到等待的结果。
更多关于为什么以及如何在承诺上找到here。