Promise.reject(1).then(2).then(res => { return 3 }).catch(error => { return 4 }).then(Promise.resolve(5)).then(console.log)
时间: 2024-04-02 16:18:53 浏览: 146
这段代码会输出数字 4。让我们逐步解释一下为什么会这样:
1. `Promise.reject(1)` 返回一个被拒绝的 Promise,其拒绝原因为数字 1。
2. `.then(2)` 返回一个新的 Promise,它的回调函数不会被调用,因为前一个 Promise 被拒绝了。
3. `.then(res => { return 3 })` 返回一个新的 Promise,它的回调函数也不会被调用,因为前一个 Promise 被拒绝了。
4. `.catch(error => { return 4 })` 返回一个新的 Promise,它的回调函数被调用并返回数字 4(作为一个被解决的 Promise)。
5. `.then(Promise.resolve(5))` 返回一个新的 Promise,它的回调函数不会被调用,因为参数不是一个函数。
6. `.then(console.log)` 返回一个新的 Promise,它的回调函数被调用并打印数字 4。
因此,最终输出的结果为数字 4。
相关问题
小程序代码: “ openAndListenBluetoothAdapter() { // 未初始化蓝牙适配器,打开蓝牙适配器 if (!this.isInitializedAdapter) { // // 监听蓝牙适配器状态 _.api('onBluetoothAdapterStateChange', 'onBluetoothAdapterStateChange') .then(__ => __) .catch(__ => __); _.on('onBluetoothAdapterStateChange', 'onBluetoothAdapterStateChange', res => { this.bm.log('onBluetoothAdapterStateChange', res); if (res.available && !this.isAvailableAdapter) { this.isAvailableAdapter = true; this.callBackConnectStatus(SuccessCallbackEvent.Success_ConnectStatus_CB_PowerOn); } else if (!res.available) { this.isAvailableAdapter = false; // 支付宝小程序当蓝牙适配器关闭,再次进行蓝牙操作需要重新打开,微信只需要打开一次就行 _.getAppPlatform() === 'ant' && (this.isInitializedAdapter = false); this.bm.connectStatus = ConnectStatus.disconnected; this.callBackConnectStatus(ErrorCallbackEvent.Error_ConnectStatus_CB_PowerOff); } }); // 先关闭再打开蓝牙适配器,避免出现某些机型打开无效的情况 return _.api('closeBluetoothAdapter') .then(__ => { // 打开蓝牙适配器 return _.api('openBluetoothAdapter') }).then(res => { this.bm.log('openBluetoothAdapter success', res); this.isInitializedAdapter = true; this.isAvailableAdapter = true; return Promise.resolve(); }).catch(e => { this.bm.log('openBluetoothAdapter fail', e); this.isInitializedAdapter = false; this.isAvailableAdapter = false; this.bm.connectStatus = ConnectStatus.disconnected; return Promise.reject(e); }) } else { return Promise.resolve(); } } ” 。提示错误“onOnBluetoothAdapterStateChange should accept a function instead of object” ,请修改
把代码中的:
```
_.api('onBluetoothAdapterStateChange', 'onBluetoothAdapterStateChange')
.then(__ => __)
.catch(__ => __);
```
修改为:
```
_.api('onBluetoothAdapterStateChange', res => {
this.bm.log('onBluetoothAdapterStateChange', res);
if (res.available && !this.isAvailableAdapter) {
this.isAvailableAdapter = true;
this.callBackConnectStatus(SuccessCallbackEvent.Success_ConnectStatus_CB_PowerOn);
} else if (!res.available) {
this.isAvailableAdapter = false;
_.getAppPlatform() === 'ant' && (this.isInitializedAdapter = false);
this.bm.connectStatus = ConnectStatus.disconnected;
this.callBackConnectStatus(ErrorCallbackEvent.Error_ConnectStatus_CB_PowerOff);
}
});
```
这是因为在调用 `_.api('onBluetoothAdapterStateChange', 'onBluetoothAdapterStateChange')` 方法时,第二个参数应该是一个函数而不是一个字符串。修改后,将在函数内部处理蓝牙适配器状态的变化。
if (res.code == 401 || res.code == 403) { // to re-login MessageBox.confirm('账号已退出,请重新登录', '确认登出', { confirmButtonText: '重新登录', cancelButtonText: '确认', type: 'warning' }).then(() => { console.log(2516) store.dispatch('user/resetToken').then(() => { location.reload() }).catch(err => { console.log(215) }) }).catch(async () => { await store.dispatch("user/toLogin"); location.reload() console.log(25) }) } return Promise.reject(new Error(res.message || 'Error')) } else { return res } },解释这段代码
这段代码是一个条件判断语句,它判断了一个变量 `res` 的属性 `code` 是否等于 401 或者等于 403。如果满足其中任一条件,就会执行相应的操作。
在这段代码中,如果 `res.code` 等于 401 或者等于 403,就会弹出一个确认框(MessageBox),提示用户账号已退出,需要重新登录。用户可以选择重新登录或者取消。如果用户选择重新登录,会调用 `resetToken` 方法重置用户的令牌(token),然后重新加载页面。如果用户取消登录,会调用 `toLogin` 方法进行登录操作,然后重新加载页面。
如果 `res.code` 不等于 401 和 403,则会返回一个 Promise 对象,该对象的状态为拒绝,并抛出一个带有消息字符串 `'Error'` 的错误对象。
总之,这段代码的作用是在特定条件下进行账号退出和重新登录的处理,并返回相应的结果或错误信息。
阅读全文