在条件是promise的情况下,是否可以在循环时生成本机JavaScript?
编辑:我试图做的是在将文件上载到firebase存储之前进行检查,以查看firebase存储中是否已经存在同名文件。如果已有同名文件,则添加随机后缀并再次检查。
var storageRef = firebase.storage().ref().child(fileName);
while(storageRef.getDownloadURL()) {
// create random number in between 0 and 100
var random = Math.floor((Math.random() * 100) + 1);
storageRef = firebase.storage().ref().child(fileName + random);
}
storageRef.put(file);
是的!
你要找的是发电机:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators.
对于更复杂的东西,我更喜欢使用Observable,例如RxJS。
是否有可能在条件为promise的情况下使本地JavaScript同时循环?
不,不是。
尝试这样做有几个问题:
>
使用ES6标准promise,无法直接测试promise的值。对最终解析的值的唯一访问权限是. so()
。当(p!==已解决)。
即使您可以循环Promission值,因为Javascript是事件驱动的单线程,如果您确实执行了循环,那么promise的异步操作将永远无法运行,promise也永远无法得到解决。
相反,您只需使用:
p.then(function(result) {
// process result here
}).catch(function(err) {
// process error here
});
如果您想在循环中做更多的事情,在我们进一步建议如何最好地做到这一点之前,您必须披露实际的代码。
如果你想重复一些操作,直到某个条件,然后把这个操作放在一个函数中,在.然后()
处理程序中测试这个条件,如果你想重复,然后再次调用这个函数。
function doSomething() {
// some async operation that returns a promise
}
function next() {
return doSomething.then(function(result) {
if (result < someValue) {
// run the operation again
return next();
} else {
return result;
}
});
}
next().then(function(result) {
// process final result here
}).catch(function(err) {
// process error here
});
编辑:使用ES7,您可以使用async
和wait
。它不会真的是一个而
循环,但它将消除对而循环的需求,因为您根本不必“轮询”异步值。
async function f() {
let value = await somePromise;
// put code here to execute after the promise
console.log(value);
}
函数f()
的内部执行将暂停,直到promise解决或拒绝为止。请注意,f()
的调用者将不会暂停f()
将在执行wait
行后立即返回promise。当f()
的内部执行最终完成时,该promise本身将解决并拒绝。
3.2.1 无循环变量的DO构造 a) 一般形式 这种DO构造形式非常简单,一般形式为: [构造名:] DO 块 END DO 不带循环控制变量的DO构造控制机制为:进入DO构造体后,从DO语句下面第一句执行起顺次执行到END DO前的最后一句,再返上来从DO语句下面第一句执行起,重复执行整个DO块。如此反复执行DO块,其间如遇到EXIT语句,就停止执行DO块,退出循环,转向执行END DO下面的
编辑:重新措辞 我有一个账户列表:帐户 当我总结这份清单时,我得到了账户数量和账户总价值的概述 名称摘要 我添加了马克,因为他现在将是一个帐户所有者,但他目前没有任何帐户。 第一步是查看每个人应该拥有的账户的平均数。有25个账户,5个所有者,所以每个人都应该有5个账户。总价值为15600英镑,共有5名所有者,因此每个人的账户价值应该在3120英镑左右。这是一个估计值,所以我对它稍微偏离一点没意见。
控制切换一个元素是否显示也相当简单: <div id="app-3"> <p v-if="seen">现在你看到我了</p> </div> var app3 = new Vue({ el: '#app-3', data: { seen: true } }) 现在你看到我了 继续在控制台输入app3.seen = false,你会发现之前显示的消息消失了。 这个例子演示
读者学到这里估计都有点不耐烦了。好吧,这些数据结构什么的看起来都挺好,但还是没法用它们做什么事,对吧? 下面开始,进度会慢慢加快。前面已经介绍过了几种基本语句(print语句、import语句、赋值语句)。在深入介绍条件语句和循环语句之前,我们先来看看这几种基本语句更多的使用方法。随后你会看到列表推倒式(list comprehension)如何扮演循环和条件语句的角色——尽管它本身是表达式。最后
问题内容: 我试图通过一次添加一天来遍历while循环,但它甚至第一次都不会访问while循环。while循环中的条件正确吗?当我测试它时,它仅在一种情况下起作用,但在我添加第二种条件时停止了。 问题答案: 它应该是
本章的主题是if语句,就是条件判断,会对应程序的不同状态来执行不同的代码。但首先我要介绍两种新的运算符:floor(地板除法,舍弃小数位)和modulus(求模,取余数) 5.1 地板除和求模 floor除法,中文有一种翻译是地板除法,挺难听,不过凑活了,运算符是两个右斜杠://,与传统除法不同,地板除法会把运算结果的小数位舍弃,返回整值。例如,加入一部电影的时间长度是105分钟。你可能想要知道这