我有一个简单的代码,其中包含要打印的功能Hello Mars!
:
var greeting = () => "Hello ";
var dbQuery = str => Promise.resolve( `${str} Mars` );
var phrase = R.pipeP(
greeting,
dbQuery,
R.flip( R.concat )("!")
);
phrase();
我正在使用,pipeP
因为dbQuery
返回了Promise。我的印象是,pipeP
如果我将整个代码转换为Promise可能会起作用,但是我确实想避免这种情况。
我的想法是什么样的东西flatMap
,又名chain
在Ramda,但也不管用。
如何在不将所有内容转换为Promise的情况下使此代码起作用?
一旦处理了Promise / Task / Future,就不可避免地要处理异步数据和程序流
如何在不将所有内容转换为Promise的情况下使此代码起作用?
通过一切,你的意思是这部分?
// ...
phrase();
出于同样的原因,三元运算符会?:
强制您同时包含条件,异步调用的两个分支,期望您同时处理Promise / Task / Future的成功分支和错误分支
// ...
phrase().then(onSuccess, onError);
当然,没有什么可以阻止您
const main = () =>
phrase().then(console.log, console.error)
main()
而且,如raina77ow所述,不建议使用pipeP(和composeP)。我们可以通过添加一个简单的then
函数来修复您的程序,该函数可以轻松插入到正常pipe
(或compose
)函数序列中
const greeting = () => "Hello ";
const dbQuery = str => Promise.resolve( `${str} Mars` );
const then = R.curry((f, p) => p.then(f))
const phrase = R.pipe(
greeting,
dbQuery,
then(R.flip(R.concat)('!'))
);
phrase().then(console.log, console.error);
// Hello Mars!
// => { Promise 'Hello Mars!' }
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句