gpt4 book ai didi

javascript - 获取对象数组 Promise,然后迭代对象

转载 作者:行者123 更新时间:2023-12-03 02:58:09 25 4
gpt4 key购买 nike

我正在尝试创建一个名为 pw_array 的数组,将 pw_subscribers 的内容分配给该数组,然后使用第二个 Promise 中的新键值对附加 pw_array 中的每个对象。我对 promise 很陌生,并且在实现这项工作时遇到了很多麻烦。现在,当我在 getCustomers 函数内的第二个 promise 中 console.log(pw_customer) 时,它正在返回我想要的内容。但是当我稍后 console.log(pw_array) 时,它是原始数组。

var pw_array = [];
//first promise is working correctly
var getPaywhirlSubscribers = new Promise(function(resolve, reject) {

paywhirl.Subscriptions.getsubscribers({limit:100}, function(error, pw_subscribers) {
Promise.all(JSON.parse(pw_subscribers).forEach(function(pw_subscriber) {
pw_array.push(pw_subscriber);
}))
// console.log(pw_array);
return resolve(pw_array);
});
});

var getGatewayReferences = function(pw_array) {
return new Promise(function(resolve, reject) {
Promise.all(pw_array.forEach(function(pw_customer) {
paywhirl.Customers.getCustomer(pw_customer.customer_id, function(error, customer) {
pw_customer.phone = customer.phone;
pw_customer.address = customer.address;
pw_customer.gateway_reference = customer.gateway_reference;
// this console.log is returning what I want
// console.log(pw_customer);
});
}));
resolve(pw_array);
// console.log(pw_array);
});
};

以及 promise 链...

getPaywhirlSubscribers.then(getGatewayReferences).then(function(pw_array) {
// this console.log is returning the original pw_array with pw_subscribers but not with the appended pw_customer keys
console.log(pw_array);
});

最佳答案

您的所有代码都可以减少为

var getPaywhirlSubscribers = function() {
return new Promise(function(res, rej) {
paywhirl.Subscriptions.getSubscribers({limit:100}, function(err, subs) {
if (err) {
rej(err);
} else {
res(JSON.parse(subs));
}
});
});
};

var gatewayRefs = function(promiseOfArray) {
return promiseOfArray.then(function(subs) {
return Promise.all(subs.map(function(sub) {
return new Promise(function(res, rej) {
paywhirl.Customers.getCustomer(sub.customer_id, function(err, customer) {
if (err) {
rej(err);
} else {
res(Object.assign({}, sub, customer);
}
});
});
});
});
};

gatewayRefs(getPaywhirlSubscribers()).then(function(arrayOfCustomers) {
// do something with the customer array
});

请注意,如果您使用许多可用实用程序之一来自动将 node.js 样式的错误优先回调 API 转换为基于 Promise 的 API,则可以使此过程变得更短/更简单。搜索“promise denodeify”。

您也可以将一些步骤拉出到 .then 链中以减少嵌套,但恕我直言,这既美观又实用。

关于javascript - 获取对象数组 Promise,然后迭代对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533959/

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