gpt4 book ai didi

javascript - 无论如何要在 javascript 中创建一个 'await' 函数来阻止 Q.js promise 直到值(value)被赎回?

转载 作者:行者123 更新时间:2023-11-29 22:00:50 32 4
gpt4 key购买 nike

我知道 JS 是一个单线程环境,但是有没有一种方法可以创建一个“等待”函数来阻止 Q.js promise 直到值(value)被赎回?

当然,下面的代码会以死循环结束。由于 'while',永远不会调用 'setTimeout' 回调,'isFulfilled' 函数始终返回 'false' 值。

var d = Q.defer();
window.setTimeout(function() {
d.resolve(true);
}, 1000);
await(d.promise);

function await(p) {
var value = undefined;
while(value == undefined) {
if(p.isFulfilled()) {
return p.inspect().value;
}
}
}

最佳答案

是的,您可以使用 Q.async 进行让步。请注意,它只会阻止当前链。此外,它需要生成器支持,因此它只能在带有标志的 NodeJS 中工作,或者使用 traceur ES6-> ES3/5 编译器,因为它使用了新的语言特性:

Q.async(function* (){
console.log("Hello");
var value = yield (new Q.Promise(function(r){ setTimeout(r,1000); }));
// alternatively, and more correctly: var value = Q(true).delay(1000);
console.log("World"); // will log one second later.
});

yield关键字被用作await,在ES7中,async/await终于在JavaScript中有了语言支持。

值得一提的是,更好/更新的 promise 库(如 Bluebird)实现生成器的速度要快得多,实际上如此之快 - that they even beat callbacks in performance.

关于javascript - 无论如何要在 javascript 中创建一个 'await' 函数来阻止 Q.js promise 直到值(value)被赎回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23870109/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com