簡體   English   中英

javascript forPromise在數組內部

[英]javascript forEach on array inside promise

在我的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 {

這行不通。 休息電話只是沒有發生。 它都不會失敗。

我在這里想念什么?

您可以嘗試編寫一個函數,該函數將返回client.get的promise,而不是回調。

以下代碼顯示了如何執行此操作,我使用的是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)));

如果您只想發出並行請求並等待所有請求完成並返回結果,則可以使用Promise.all()

const getAll = (items) =>
    Promise.all(items.map(i => callApi(i)))

getAll([1, 2, 3])
    .then(results => console.log(results))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM