在某些情况下,当我从promise对象获得返回值时,我需要then()
根据值的条件来启动两个不同的进程,例如:
promise().then(function(value){
if(//true) {
// do something
} else {
// do something
}
})
我在想也许我可以这样写:
promise().then(function(value){
if(//true) {
// call a new function which will return a new promise object
ifTruePromise().then();
} else {
ifFalsePromise().then();
}
})
但是有了这个,我有两个问题:
我不确定开始一个新的承诺是否是个好主意,然后在承诺中进行流程;
如果我需要两个进程在最后一个函数中调用怎么办?这意味着它们具有相同的“终端”
我试图返回新的承诺,以保持原始链像:
promise().then(function(value){
if(//true) {
// call a new function which will return a new promise object
// and return it
return ifTruePromise();
} else {
// do something, no new promise
// hope to stop the then chain
}
}).then(// I can handle the result of ifTruePromise here now);
但是在这种情况下,无论是对还是错,下一个then
都可以。
那么,处理它的最佳实践是什么?
只要您的函数返回承诺,就可以使用建议的第一种方法。
下面的小提琴显示了如何根据第一个解析的值采用不同的链接路径。
function myPromiseFunction() {
//Change the resolved value to take a different path
return Promise.resolve(true);
}
function conditionalChaining(value) {
if (value) {
//do something
return doSomething().then(doSomethingMore).then(doEvenSomethingMore);
} else {
//do something else
return doSomeOtherThing().then(doSomethingMore).then(doEvenSomethingMore);
}
}
function doSomething() {
console.log("Inside doSomething function");
return Promise.resolve("This message comes from doSomeThing function");
}
function doSomeOtherThing() {
console.log("Inside doSomeOtherthing function");
return Promise.resolve("This message comes from doSomeOtherThing function");
}
function doSomethingMore(message) {
console.log(message);
return Promise.resolve("Leaving doSomethingMore");
}
function doEvenSomethingMore(message) {
console.log("Inside doEvenSomethingMore function");
return Promise.resolve();
}
myPromiseFunction().then(conditionalChaining).then(function () {
console.log("All done!");
}).
catch (function (e) {
});
您也可以只进行一个条件链接,将返回承诺分配给变量,然后继续执行应以任何一种方式运行的功能。
function conditionalChaining(value){
if (value) {
//do something
return doSomething();
} else{
//do something else
return doSomeOtherThing();
}
}
var promise = myPromiseFunction().then(conditionalChaining);
promise.then(function(value){
//keep executing functions that should be called either way
});
在某些情况下,当我从一个promise对象得到一个返回值时,我需要启动两个不同的过程取决于值的条件,比如: 我在想也许我可以这样写: 但我有两个问题: > 如果我需要两个进程在最后调用一个函数呢?这意味着他们有相同的“终端” 我试图回报新的promise,保持原来的链条,如: 但是在这种情况下,无论是真是假,下一个
问题内容: 这是我的代码的简短版本。 这两个条件都调用。有办法避免其他情况吗?我可以,但是我正在寻找一种非阻塞的解决方案。 问题答案: 我想你在找 这是短的
Perl条件语句有助于决策,这需要程序员指定一个或多个要由程序评估或测试的条件,以及在条件被确定为真时要执行的一个或多个语句,以及可选的其他条件如果确定条件为假,则执行语句。 以下是大多数编程语言中的典型决策结构的一般性 - 数字0,字符串'0'和“”,空列表()和undef在布尔上下文中都是false ,所有其他值都为true 。 否定真正的价值! 或not返回特殊的假值。 Perl编程语言提供
问题内容: 作为节点程序员。我习惯于使用“ nodebacks”来处理代码中的错误: 编写该函数时,我可以执行以下操作: 我如何用promises处理这种错误? 问题答案: 经验法则 每当您对如何使用Promise有所疑问时,请考虑一下同步版本。 至少对我来说,这比第一个参数有时是的回调要干净得多。 promises方式几乎总是与问题的同步版本非常相似: 使用回调函数时,myFn看起来像什么: 使
本文向大家介绍C# if, if...else, if... else if ,包括了C# if, if...else, if... else if 的使用技巧和注意事项,需要的朋友参考一下 示例 该if语句用于控制程序的流程。一条if语句根据Boolean表达式的值标识要运行的语句。 对于单个语句,braces{}是可选的,但建议使用。 该if还可以有一个else条款,将在案件条件的计算结果来执
我们的组织有一个必需的编码规则(没有任何解释),即: if...else if构造应该用else子句终止 示例1: