每天前端学习 关于Promise和Symbol
今天工作遇到个关于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