V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  nomagick  ›  全部回复第 11 页 / 共 31 页
回复总数  618
1 ... 7  8  9  10  11  12  13  14  15  16 ... 31  
2024-10-24 12:06:23 +08:00
回复了 punish19 创建的主题 随想 愚孝是心理疾病了吧?
文革长大的一代多少有点心理问题,理解为主,主要是你也没有任何办法
2024-10-24 12:03:38 +08:00
回复了 Pepsigold 创建的主题 职场话题 帮忙选一下 offer,国内国外都有!
楼主加油,我的 offer 还在等待国务院批准
我这边是 node.js 20.11.1
我觉得可能和原生 async function 有关,如果是原生的 async function 你这个 hack 就中断不了,但如果是 babel 之类的编译器模拟出来的,打断 then 链条就可以。
不啊,你这言之凿凿的都给我整不自信了,你这真的是没有中断任何代码的执行,而是你的 cancel 操作,造成了 task.locals.count 的赋值失败,这产生了
TypeError: Cannot set properties of undefined (setting 'count')

这才中断了执行,如果你不操作 task.locals ,task1 就会一直运行下去
```typescript
import { task } from 'protask';

function sleep<T>(milliSeconds: number, arg?: T): Promise<T> {
return new Promise(function (resolve, reject) {
setTimeout(resolve, milliSeconds, arg);
});
}

async function printTaskLocal() {
await sleep(100);
console.info(task.locals());
}

task.create('test task 1', async () => {
try {
for (let i = 0; i < 100; i++) {
// task.locals().count = i;
console.log('task 1 running');
await printTaskLocal();
await sleep(1000);
}
console.log('Task 1 resolve');
} catch (e: any) {
console.log('Task 1 error');
console.info(e.toString());
} finally {
console.log('Task 1 finally');
}
});

task.create('test task 2', (async () => {
await sleep(3000);
console.info('abort task 1');
task.abort('test task 1');
}));
```
不对,我真的下载下来运行了。

复写 then 不足以中断执行流,你的 example 之所以能够 work 是因为 `task.locals()!.count=i;` 这句在 cancel 之后抛了异常,起到了 abort error 的效果。。。
@pursuer 打扰了,看起来真的可以,进入了我的知识盲区,原来复写 promise.then 就能中断执行流,那我就比较好奇了,async function 原本的那个 promise 后来怎么样了,这个 promise 是不是吊起来了
@nomagick 哦,对不起,是我搞混了
@pursuer 没有啊,在 cancel 的情况,不是 reject 的情况 https://github.com/partic2/protask/blob/b22d446a33cf47e34f3aa4e6d4244185aa75d9cf/src/index.ts#L57-L60
你在这 catch 了之后没有做任何操作,Promise 就吊在这了,这也是你能看起来中断执行的所在
@pursuer 所以你至少在 cancel 之后需要 reject cancel error, 这样下游的代码路径才能继续结算,所以下游也需要再在某个地方 catch cancel error ,对代码的入侵性不亚于显式 if (await jobCancelled) return;

说到底对代码执行流程的操作,还是要交给语言和运行时层面去解决,如果一个函数流程,是不是被完整执行,还可以被外部代码莫名其妙地影响,这对整个系统来讲完全就是一个灾难
@pursuer 不一样,通过 iterator 实现代码是中断了的,运行时知道现在代码已经 throw 或者 return ,但你现在这样,通过 hack 阻止 Promise 结算,Promise 是一直吊在 pending 状态的,运行时也不知道你这部分代码不会再执行了,只知道 Proimse 没有 resolve 。

具体运行时有没有足够聪明能够解开这个泄漏局我不太了解,总之你这操作非常危险,很有可能解不开,而且即便能解开,我看你代码一旦 cancel, 因为你阻断了 Promise 结算,所以 cleanup 的步骤就永远不会执行,但你对这些 AbortSignal 却有全局的引用,这部分也会泄露。
不是这样的,你这没有作用。。

主动中断同步代码目前只能通过操作系统,中断线程或中断进程
主动中断异步代码,可以通过 iterator 在 yield 的节点中断,但在 js 语法之外需要魔改

你这只是在上游 then 之后选择是否往下游返回,没有中断任何代码的执行,掩耳盗铃了属于是
2024-10-17 21:13:22 +08:00
回复了 viarotel 创建的主题 分享创造 Cleants:开历史的倒车,但至少我是认真的
。。。缓慢打出一个问号 ❓
2024-10-17 13:47:33 +08:00
回复了 tmkook 创建的主题 分享发现 避雷 yeelight
啥品牌 10 年质保呢,这公司能给自己保十年不。。

都是 LED 给惯的毛病,从前没有 LED 照明灯的时候,还 10 年,10 个月就阿弥陀佛了
2024-09-30 14:17:51 +08:00
回复了 651794071 创建的主题 职场话题 靠家里关系进央国企心里觉得别扭,求建议
@nomagick 实际情况等于是公司托关系找的我, 进去之后别人没有懂的,进去搞科普正时弊挑大梁
2024-09-30 14:14:54 +08:00
回复了 651794071 创建的主题 职场话题 靠家里关系进央国企心里觉得别扭,求建议
别把所谓央企想得多么美好,不一定适合你,是谁托关系找的谁还不一定呢

我刚毕业那会也算是家里托关系进了一家央企下面的公司

后来进去以后,实际情等于况是这家公司托关系找来了我

如果不是家里的关系,对方是不可能用那么低廉的工资招到劳资这种程度的专业技术人员的
2024-09-28 21:54:21 +08:00
回复了 pimin 创建的主题 投资 给还没进入股市的朋友一点建议
求仁得仁

有的人就觉得股票纯就是交易,就是和庄家坐下赌,那 A 股还真就是这种地方。

但是你要想找稳定分红能当理财的个股,其实也能找到
2024-09-19 15:37:21 +08:00
回复了 0x663 创建的主题 健康 在北京便不成形,排便困难
饮水机多久没刷了
没错,prettier 懂个茄子,多打两个空行都不行,说起来就是劳资最懂,空行就是不能多,简直为祸一方
1 ... 7  8  9  10  11  12  13  14  15  16 ... 31  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2102 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 16:08 · PVG 00:08 · LAX 09:08 · JFK 12:08
♥ Do have faith in what you're doing.