Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
Promise.myAllsettled = function(list) {
    if (list.length === 0) return Promise.resolve([])
    const results = []
    let count = 0
    const settled = (index, status, res, resolve) => {
        results[index] = {
            status,
            ...res
        }
        count += 1
        if (count == list.length) {
            resolve(results)
        }
    }
    return new Promise((resolve) => {
        list.map((item, index) => {
            // 把数据都处理成Promise
            Promise.resolve(item).then(
                res => {
                    settled(index, 'fulfilled', {value: res}, resolve)
                },
                err => {
                    settled(index, 'rejected', {reason: err}, resolve)
                }
            )
        })
    })
}
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'foo'));
const promises = [promise1, promise2];
Promise.myAllsettled(promises).
  then((results) => results.forEach((result) => console.log(result, result.status)));
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers