promise 对象的状态能在外部改变吗?
比方说如下的代码,我想让当 queue 的长度小于 3 的时候,push 一个值进去。初步的想法是await
一个 promise ,然后整个 put 函数阻塞在这里,等到 promise 状态改变了以后,也就是 queue 中的元素被取出且长度小于 3 时,put 函数继续从阻塞的地方开始执行,然后 reslove(),这样接下来就可以 push 值了。
let queue = [];
async function put(message) {
await new Promise((resolve, reject) => {
//这里不知道该怎么写,下面的写法不对
if(queue.lenth <=3){
resolve();
}
})
queue.push(message)
}
我不是整个思路都错了?我现在把zh.javascript.info里面 promise 那一章看完了,是不是有哪些概念没理解?该从哪里去搜索这方面的问题?给点关键词吧。
1
autoxbc 2022-03-04 17:29:07 +08:00
建议描述一下希望在什么场景解决什么问题,而不是为了试一下新技术去凑出一个场景
|
2
FrankFang128 2022-03-04 17:31:03 +08:00
promise 对象的状态能在外部改变吗?
不能,但是你可以在 then 里 return 一个 Promise.resolve() 或 Promise.reject(), 后续的 then 回调会拿到这个值。 |
3
ochatokori 2022-03-04 17:37:09 +08:00 via Android
resolve 可以赋值给外部对象,让外部调用,这样就是在外部改变 promise 的状态
|
4
krapnik 2022-03-04 17:39:34 +08:00 1
let queue = [],resolveFn;
async function put(message) { console.log(0); await new Promise((resolve, reject) => { resolveFn=resolve; //这里不知道该怎么写,下面的写法不对 if(queue.lenth <=3){ resolve(); } }); console.log(1); queue.push(message); }; put();// 0 resolveFn(); //手动 resolve => 1 |
5
wunonglin 2022-03-04 17:39:56 +08:00
描述的不是很清楚,你是想异步改变 queue ?
|
6
hazardous 2022-03-04 17:56:32 +08:00
可以
---------- let outside_resolve; const mypromise = new Promise( (resolve, reject) => { outside_resolve = resolve; } ); --------- function other_func_1() { if (queue.length < 3) { outside_resovle(); } } --------- function other_func_2() { await mypromise; queue.push(num); } ---------- |
7
rabbbit 2022-03-04 18:24:56 +08:00 1
let reso;
new Promise((resolve, reject) => (reso = resolve)).then(() => console.log("success") ); reso(); |