所以考虑下面的代码,当我解析
promise
时,结果在第一时刻就处于 pending
状态(我知道在展开下拉列表后我会看到预期的结果,但在这里我质疑的是第一时刻),当我拒绝一个承诺时,它会在第一时刻显示出预期的结果。所以我想知道为什么会发生这种情况?
代码:
const test = new Promise((resolve, reject) => {
resolve(Promise.resolve(78))
})
console.log(test);
//output in console:Promise {<pending>}
const test2 = new Promise((resolve, reject) => {
reject(Promise.resolve(78))
})
console.log(test2);
//output:promise {<rejected>: Promise}
Promise
字面上是一个承诺:承诺在完成某些工作后提供一些价值。因此,要获取值,您应该等待它,或者使用 then
/ catch
方法提供回调。
基本上,当你有
test
const 时:
const test = new Promise((resolve, reject) => {
resolve(Promise.resolve(78)); // or reject(Promise.resolve(78));
})
您有两个有效的选项来编写确定性代码:
// Use callbacks:
test
.then(result => console.log("It's for sure successfully completed."))
.catch(e => console.log("It's for sure failed at this moment."));
// Use await:
try {
const result = await test;
console.log("It's for sure successfully completed.")
} catch (e) {
console.log("It's for sure failed at this moment.")
}
您所观察到的只是某些内部实施的结果,您不应该依赖该观察。这个实际结果可能会在其他 JavaScript 引擎或不同版本中发生变化。