FE-Interview icon indicating copy to clipboard operation
FE-Interview copied to clipboard

Day127:按要求完成 mergePromise 代码

Open Genzhen opened this issue 5 years ago • 3 comments

const timeout = (ms) =>
  new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
    }, ms);
  });
const ajax1 = () =>
  timeout(2000).then(() => {
    console.log("1");
    return 1;
  });
const ajax2 = () =>
  timeout(1000).then(() => {
    console.log("2");
    return 2;
  });
const ajax3 = () =>
  timeout(2000).then(() => {
    console.log("3");
    return 3;
  });
const mergePromise = (ajaxArray) => {
  // 1,2,3 done [1,2,3] 此处写代码 请写出ES6、ES3 2中解法
};
mergePromise([ajax1, ajax2, ajax3]).then((data) => {
  console.log("done");
  console.log(data); // data 为[1,2,3]
});
// 执行结果为:1 2 3 done [1,2,3]

Genzhen avatar Aug 27 '20 07:08 Genzhen

每日一题会在下午四点在交流群集中讨论,五点 Github、交流群同步更新答案

扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。

Genzhen avatar Aug 27 '20 07:08 Genzhen

const timeout = (ms) => new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve()
  }, ms)
})
const ajax1 = () => timeout(2000).then(() => {
  console.log('1')
  return 1
})
const ajax2 = () => timeout(1000).then(() => {
  console.log('2')
  return 2
})
const ajax3 = () => timeout(2000).then(() => {
  console.log('3')
  return 3
})
const mergePromise = (ajaxArray) => {
	var data = []
	var sequence = Promise.resolve()
	ajaxArray.forEach((item) => {
      console.log('item', item)
		sequence = sequence.then(item).then((res) => {
			data.push(res)
			return data
		})
	})
	return sequence
}
mergePromise([ajax1, ajax2, ajax3]).then((data) => {
  console.log('done')
  // data 为[1,2,3]
  console.log(data)
})
// 执行结果为:1 2 3 done [1,2,3]

luuman avatar Nov 01 '21 09:11 luuman

const timeout = (ms) => new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve()
  }, ms)
})
const ajax1 = () => timeout(2000).then(() => {
  console.log(1)
  return 1
})
const ajax2 = () => timeout(1000).then(() => {
  console.log(2)
  return 2
})
const ajax3 = () => timeout(2000).then(() => {
  console.log(3)
  return 3
})

const mergePromise = (ajaxArray) => {
  return new Promise((resolve, reject) => {
    if (!ajaxArray.length) return resolve([])
    const result = []
    const request = async () => {
      const ajax = ajaxArray.shift()
      const res = await ajax()
      result.push(res)
      if (!ajaxArray.length) {
        resolve(result)
      } else {
        request()
      }
    }
    request()
  })
}
mergePromise([ajax1, ajax2, ajax3]).then((data) => {
  console.log('done')
  console.log(data) // data 为[1,2,3]
})
// 执行结果为:1 2 3 done [1,2,3]

DaphnisLi avatar May 19 '23 09:05 DaphnisLi