是否有一种速记可以获得Promise的价值并将其推向承诺链而不明确地返回它?
换句话说,bluebird中是否有以下的简写语法:
var syntaxTree = CSharpSyntaxTree.ParseText(usercode,
new CSharpParseOptions(LanguageVersion.Default, DocumentationMode.None, SourceCodeKind.Script));
var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
var userlib = MetadataReference.CreateFromFile(userlibPath);
var compilation = CSharpCompilation.Create("MyCompilation",
syntaxTrees: new[] { syntaxTree }, references: new[] { mscorlib, userlib });
var model = compilation.GetSemanticModel(syntaxTree);
答案 0 :(得分:1)
你可以使用箭头功能体内的Comma operator(不带花括号):
.then(result => (callSomething(result), result)
逗号运算符
计算每个操作数(从左到右)并返回最后一个操作数的值。
因此,result
由表达式返回:
(callSomething(result), result)
然后,没有花括号的箭头函数返回指定为其主体的表达式的值。因此,返回result
。
答案 1 :(得分:1)
如果您经常使用此模式,为什么不为它制作通用方法
Promise.prototype.skip = function skip(fn, onRejected) {
return this.then(value => Promise.resolve(fn(value)).then(() => value), onRejected);
};
让我们说你的例子callSomething
返回一个承诺
function callSomething(v) {
console.log('skip got', v);
// this promise will be waited for, but the value will be ignored
return new Promise(resolve => setTimeout(resolve, 2000, 'wilma'));
}
现在,b使用skip
代替then
,传入的已实现值(在本例中为fred
)将仅传递以下then
,但在此之后callSomething
返回的承诺已履行
Promise.resolve('fred').skip(callSomething).then(console.log); // outputs "fred"
但是,如果callsomething
没有返回承诺,则无关紧要