每天前端学习 关于Promise和Symbol

88520191 2020-06-13

今天工作遇到个关于Promise的小问题,结果是自己太新手,后来解决了

function test() {
    return new Promise (resolve, reject) {     
      reject(‘超时‘)    
    }
}

使用了await, 必须catch才能让阻塞放开

 async function () {
    const obj = await test() // 若不catch则会一直阻塞在这
    console.log(‘打印了‘)  // 没打印   
}

正确: 
 async function () {
  const obj = await test().catch(e => {})
  console.log(obj)  // ‘超时‘  
}

若 要等待多个结果回来,再进行返回,则可以使用 Promise.all(arg1,arg2,arg3.....)

let p1 = new Promise((resolve, reject) => {
  resolve(‘成功了‘)
})

let p2 = new Promise((resolve, reject) => {
  resolve(‘success‘)
})

let p3 = Promise.reject(‘失败‘)

Promise.all([p1, p2]).then((result) => {
  console.log(result)               //[‘成功了‘, ‘success‘]
}).catch((error) => {
  console.log(error)
})

Promise.all([p1,p3,p2]).then((result) => {
  console.log(result)
}).catch((error) => {
  console.log(error)      // 失败了,打出 ‘失败‘
})

ES6新增一个数据类型 Symbol ,但不支持 new Symbol,可以返回唯一值 ,一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的

const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol(‘foo‘);cibst symbol4 = new Symbol(); // TypeError
console.log(typeof symbol1);
// expected output: "symbol"

console.log(symbol2 === 42);
// expected output: false

console.log(symbol3.toString());
// expected output: "Symbol(foo)"

console.log(Symbol(‘foo‘) === Symbol(‘foo‘));
// expected output: false
 
 

当使用 JSON.stringify() 时,以 symbol 值作为键的属性会被完全忽略

当一个 Symbol 包装器对象作为一个属性的键时,这个对象将被强制转换为它包装过的 symbol

JSON.stringify({[Symbol("foo")]: "foo"});



var sym = Symbol("foo");
var obj = {[sym]: 1};
obj[sym];            // 1
obj[Object(sym)];    // still 1

相关推荐