在我的javascript函数中,我可以在promise中调用rest服务。
function update(item) {
return new Promise(function (resolve, reject) {
client.get(urls[env] + item['itemId'], function (data, response) {
try {......
现在,当我修改相同的函数来处理项目数组时:
function update(itemList) {
return new Promise(function (resolve, reject) {
itemList.forEach((item) =>{
client.get(urls[env] + item['itemId'], function (data, response) {
try {
这不起作用。休息电话不会发生。它既没有失败。
我在这里缺少什么?
答案 0 :(得分:0)
您可以尝试编写一个函数,该函数将返回client.get的承诺而不是回调。
以下代码显示了如何执行此操作,我使用的是ES5,但假设是本机Promises或polyfill:
function promiseClientGet(o, url){
return new Promise(function(resolve,reject){
o.get(url, function (data, response) {
// try {...... need to call resolve or reject
});
});
}
function update(itemList) {
return Promise.all(itemList.map(function(item) {
return promiseClientGet(urls[env] + item['itemId'], client);
}))
}
使用ES6:
const promiseClientGet = (o, url) => new Promise((resolve,reject)=> {
o.get.apply(o, (data, response) => {
// try {...... need to call resolve or reject
});
});
const update = itemList =>
Promise.all(itemList.map(item => promiseClientGet(urls[env] + item['itemId'], client)));
答案 1 :(得分:0)
如果您只是想要发出并行请求并等待所有请求完成并返回结果,那么您可以使用Promise.all()
const getAll = (items) =>
Promise.all(items.map(i => callApi(i)))
getAll([1, 2, 3])
.then(results => console.log(results))