- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
thenable
链接如何异步?看起来从上一个 Promise.then
返回的 promise
正在阻塞(其意图本身就是按照下面给出的示例阻塞)下一个 Promise.then
在链中。我对 Node.js 中的 promises
很陌生。谁能帮助我更好地理解 thenable
链接是如何异步的?
从给定的示例来看,为什么我们不使用同步函数本身,而是使用 thenable
链?
new Promise(function(resolve, reject) {
setTimeout(() => resolve(1), 1000); // (*)
}).then(function(result) { // (**)
alert(result); // 1
return result * 2;
}).then(function(result) { // (***)
alert(result); // 2
return result * 2;
}).then(function(result) {
alert(result); // 4
return result * 2;
});
最佳答案
then
链是异步的,因为 Promise 链后面的代码将在不等待 Promise 达到其已解决状态的情况下执行。
function sleep (ms) {
return new Promise(resolve, setTimeout(resolve, ms));
}
// counts to 3 in 3 seconds, thanks to asynchronicity
sleep(3000).then(() => console.log('3'));
sleep(2000).then(() => console.log('2'));
sleep(1000).then(() => console.log('1'));
给定 Promise 的 then
方法提供了一种附加任何函数的方法应该等待它的返回值(*)。因此, promise 链代表“同步指令序列”但它相对于程序的其余部分是异步的。
function add (i) {
return sleep(1000)
.then(() => { console.log(i+1); return i+1 });
}
// counts to 3 in 3 seconds, thanks to synchronicity along the chain
Promise.resolve(0).then(add).then(add).then(add);
当然,如果只处理线性链,引入异步性是完全没有用的。相关性仅在创建平行链时才会出现。相反,采用这个简单的同步 shell 脚本:
// counts *down* in 6 seconds
sleep 3; echo 3;
sleep 2; echo 2;
sleep 1; echo 1;
请注意, sleep 通常表示等待网络上的某些不同资源,以便清楚地了解异步性的好处。
与此同时,如果没有一种方便的方法来线性化任务并使某些代码片段相互等待,则异步性将无法处理。Promise 是实现这一目标的便捷方式,介于过去的“厄运回调金字塔”和即将到来的 ECMA 2017 async/await 关键字之间,see here例如。
(*) 请注意,始终在中间函数中返回某些内容,否则整个链的其余部分可能会停止等待。
关于javascript - thenable 链是异步的 - Promises 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50572453/
问题是标题。我正在尝试更深入地了解 promises,我想我已经弄清楚了 Promise.resolve(thenable) 的工作原理,或者至少大部分是如何工作的,查看 MDN 上的示例。我想知道两
我试图理解 resolve(thenable) 和 resolve('non-thenable-object') 之间的区别。 在下面的示例中,使用 promise 而不是 thenable,因为 p
我正在尝试创建一个返回值但不工作的 thenable 对象: const fetchItem = () => 'item'; function test() { return { asyn
如何在返回 Deferred.promise() 的函数之后运行返回 promise 的函数? 我在 JSFiddle 上有一个问题示例.警报消息旨在以“第三次执行?”结尾。而不是在“首先执行?”中间
我知道 thenable 具有 then 方法,但是 Promise 如何知道 thenable 对象的状态已转为拒绝? 示例:在这里,$.ajax 是一个 thenable,如果你这样做的话,可以将
这个问题已经有答案了: How to return many Promises and wait for them all before doing other stuff (6 个回答) How d
thenable 链接如何异步?看起来从上一个 Promise.then 返回的 promise 正在阻塞(其意图本身就是按照下面给出的示例阻塞)下一个 Promise.then 在链中。我对 Nod
我的项目中有这样的代码: co(function *asyncFn() { let browser = yield someAsyncOperation(); return brows
我有一个函数接受 thenable(具有 then() 方法的对象;参见 MDN JavaScript docs: Promise.resolve() 的顶部)或其他: function resolv
我有一个函数可以返回 firebase firestore 查询的快照。如下: export async function getClientWorkflowsFromFirebase(clientI
我正在使用 faye browser client使用 promises,我有一个函数可以在执行异步操作后创建一个 faye 客户端,如下所示: function fayeClient() { r
我认为到目前为止我采取的一个原则是: A promise is a thenable object, and so it takes the message then, or in other wor
我正在开发一个用 F# 编写的 vscode 扩展,使用 Fable 编译成 javascript。许多 api 返回一个 promise 。解析具有返回类型(例如 Thenable)的 promis
我想知道自定义“thenables”(又名带有 .then() 方法的对象)是否被批准/记录?它们与真正的 Promise 相比如何?我想这很重要,那么您如何实现,所以我想知道是否有包含一些 DO 和
这个安全装置有必要吗? Promise.all([...].map((thenable) => Promise.resolve(thenable))); 是否可以安全地将 thenable 提供给收集
这个问题在这里已经有了答案: Does await await promise-like objects? [duplicate] (2 个答案) Custom thenables: Can I c
根据loopback's official docs ,updateAll方法有3个参数:where、data、callback,其中callback为必填项。 Account.deleteSingl
这个问题在这里已经有了答案: Does await await promise-like objects? [duplicate] (2 个答案) Custom thenables: Can I c
当我尝试验证如下条件时。 var val1 = "ONE"; var val2 = "TWO"; expect(val1==val2).to.eventually.equal(false) 我得
根据 MDN: ...if the value is a thenable (i.e. has a "then" method), the returned promise will "follow"
我是一名优秀的程序员,十分优秀!