Tag: 承诺

蓝鸟,承诺,然后()

我一直只使用蓝鸟几天,但我想要去所有我的旧代码,并promisify它:) 我的问题是我还没有完全掌握then()命令的stream程。 考虑这两个块: 一个 methodThatReturnsAPromise().then(task2).then(task3); 乙 var promise = methodThatReturnsAPromise(); promise.then(task2) promise.then(task3); 在场景中, task3会得到task2的结果吗? 在B他们都得到了第一个承诺的结果? 第二个与蓝鸟运行Promise.all有什么不同? 这些A / B / Promise.all方法在使用catch方法时有什么不同(我把它放在哪里)。 对不起,这是一大堆问题。

如何创build一个类似于Angular 2中的http的静态数据的Observable?

我有一个服务,有这个方法: export class TestModelService { public testModel: TestModel; constructor( @Inject(Http) public http: Http) { } public fetchModel(uuid: string = undefined): Observable<string> { if(!uuid) { //return Observable of JSON.stringify(new TestModel()); } else { return this.http.get("http://localhost:8080/myapp/api/model/" + uuid) .map(res => res.text()); } } } 在组件的构造函数中,我是这样订阅的: export class MyComponent { testModel: TestModel; testModelService: TestModelService; constructor(@Inject(TestModelService) testModelService) { this.testModelService […]

你如何正确地从承诺中返回多个值?

我最近遇到了一些情况,我不知道如何正确解决。 假设下面的代码: somethingAsync() .then( afterSomething ) .then( afterSomethingElse ) function afterSomething( amazingData ) { return processAsync( amazingData ); } function afterSomethingElse( processedData ) { } 现在可能会出现我想在afterSomethingElse访问amazingData的afterSomethingElse 。 一个明显的解决scheme是从afterSomething返回一个数组或一个哈希值,因为,你只能从一个函数返回一个值。 但是我想知道是否有方法让afterSomethingElse接受两个参数并且同样调用它,因为这似乎更容易logging和理解。 我只是想知道这种可能性,因为有Q.spread ,它做了类似于我想要的东西。

如何使用mongoose诺言 – mongo

有人可以给我一个关于如何使用mongoose的承诺的例子。 这是我所拥有的,但并不像预期的那样工作: app.use(function (req, res, next) { res.local('myStuff', myLib.process(req.path, something)); console.log(res.local('myStuff')); next(); }); 然后在myLib中,我会有这样的东西: exports.process = function ( r, callback ) { var promise = new mongoose.Promise; if(callback) promise.addBack(callback); Content.find( {route : r }, function (err, docs) { promise.resolve.bind(promise)(err, docs); }); return promise; }; 在某些时候,我期待着我的数据出现,但是我怎样才能访问它,或者得到它呢?

承诺callback承诺回报

关于这两个重要来源: 新西兰 – 承诺诺言链条和MDN诺言 ,我想问一下: 每次我们从promise履行处理程序返回一个值时,该值是如何传递给从同一个处理程序返回的新的promise的? 例如, let p1 = new Promise(function(resolve, reject) { resolve(42); }); let p2 = new Promise(function(resolve, reject) { resolve(43); }); let p3 = p1.then(function(value) { // first fulfillment handler console.log(value); // 42 return p2; }); p3.then(function(value) { // second fulfillment handler console.log(value); // 43 }); 在这个例子中, p2是一个承诺。 p3也是p1履行处理程序的承诺。 然而p2 !== […]

使用Function.prototype.bind与参数数组?

我怎样才能调用Function.prototype.bind一个参数数组,而不是硬编码参数? (不使用ECMA6,所以没有传播运营商)。 我试图把承诺包装周围使用callback模块,我想绑定所有parameter passing到我的包装方法,并绑定它们。 然后我想用我自己的callback调用部分应用的绑定函数,这将解决或拒绝承诺。 var find = function() { var deferred, bound; deferred = Q.defer(); bound = db.find.bind(null, arguments); bound(function(err, docs) { if(err) { deferred.fail(err); } else { deferred.resolve(docs); } }); return deferred.promise; } 但是显然这不起作用,因为绑定需要参数而不是参数数组。 我知道我可以通过将我的callback插入到参数数组的末尾来使用apply: arguments[arguments.length] = function(err, docs) { … } db.find.apply(null, arguments); 或者通过遍历参数数组并重新定义每个参数的函数: var bound, context; for(var i = 0; i […]

JavaScript的命名约定的承诺?

我觉得有一个有约定的JavaScriptvariables的命名约定是有用的。 除了编程语言标准之外,我通常不喜欢或者提倡命名约定,但是在承诺被作为函数parameter passing的编程风格中,通常很难一目了然地告诉variables是否有承诺或者“真实的东西”。 我个人使用过promiseOfFoo和pFoo ,但是我发现前者有点冗长,而后者则让我从匈牙利回忆。 有一个常用的约定吗?

如何获得承诺的价值?

我正在从Angular的$q文档看这个例子,但我认为这可能适用于一般的承诺。 他们有这个例子,逐字抄写他们的评论,包括: promiseB = promiseA.then(function(result) { return result + 1; }); // promiseB will be resolved immediately after promiseA is resolved and its value // will be the result of promiseA incremented by 1 我不清楚这是如何工作的。 如果我可以调用.then()对第一个.then()的结果进行链接,我知道我可以,那么promiseB是一个Objecttypes的promise对象。 这不是一个Number 。 那么它的意思是“它的价值将会是promiseA增加1的结果”呢? 我应该作为promiseB.value或类似的东西访问? 成功callback如何返回承诺并返回“result + 1”? 我错过了一些东西。

如何从setTimeout作出承诺

这不是一个现实世界的问题,我只是想了解如何创造承诺。 我需要了解如何为不返回任何内容的函数做出承诺,比如setTimeout。 假设我有: function async(callback){ setTimeout(function(){ callback(); }, 5000); } async(function(){ console.log('async called back'); }); 如何创build一个承诺, async可以在setTimeout准备好callback()之后返回? 我想包裹它会带我到某个地方: function setTimeoutReturnPromise(){ function promise(){} promise.prototype.then = function() { console.log('timed out'); }; setTimeout(function(){ return ??? },2000); return promise; } 但我无法超越这个想法。

NodeJS UnhandledPromiseRejectionWarning

所以,我正在testing一个依赖事件发生器的组件。 为此,我想出了一个使用Mocha + Chai的承诺的解决scheme: it('should transition with the correct event', (done) => { const cFSM = new CharacterFSM({}, emitter, transitions); let timeout = null; let resolved = false; new Promise((resolve, reject) => { emitter.once('action', resolve); emitter.emit('done', {}); timeout = setTimeout(() => { if (!resolved) { reject('Timedout!'); } clearTimeout(timeout); }, 100); }).then(((state) => { resolved = […]