Articles of 延期

如何asynchronous方式调用10个函数并收集所有结果并知道何时完成?

我使用Node.js的延期模块,并创build了从远端服务器获取数据的延迟函数。 我需要从不同的遥远的服务器获取10个文件,如何做到这一点,承诺知道什么时候完成,然后获取所有结果在数组? 目前我已经closures了,而且只有在完成之前,我才能获取下一个文件,但是它是同步和慢速的。

从asynchronous请求循环获取值

我试图编写一个nodejs程序,查询github的回购列表(通过github API的节点封装: https ://www.npmjs.com/package/github),并检索数组中的git克隆url,然后我希望按字母顺序sorting。 由于调用的asynchronous性质,我不知道如何等待,直到所有的asynchronous请求返回? 这里是问题的循环。 repoArray是[username / reponame]格式的数据库 var urls = []; for (var i=0; i < repoArray.length; i++) { var components = repoArray[i].split('/'); github.repos.get({ user: components[0], repo: components[1] }, function(err, res) { urls.push(res.ssh_url); }); } // do a case-insensitive sort urls.sort(function(a,b) { return a.localeCompare(b, 'en', {'sensitivity': 'base'}); }); console.log("urls: " + urls); 基本上,因为在循环中的github.repos.get()调用都是基于asynchronous/基于callback的,所以当代码到达urls.sort(),然后是console.log()时,没有一个或一些github.repos.get […]

将内部的失败/拒绝传递给jQuery中的外部承诺,以避免代码重复

我是新来的这个延期的东西,但发现一个低。 我仍然在寻找一种方法来“保存”冗余fail -> login在以下代码中fail -> login : $.when(loginHandler.findLegacyUser(username, password)) .done((doc:imports.ILegacyUser) => { $.when(loginHandler.migrateUser(doc, password)) .done((doc:model.IUser) => { req.feedback.add("Your existing account was migrated successfully"); req.session.username = doc.username; res.redirect('/members/'); }).fail((err) => { login(req, res); }); }).fail((err) => { login(req, res); }); 它的作用应该从我希望的命名中清楚地看出来。 所以,每当迁移失败,我们要进行正式login 。 要迁移,我们首先必须查找一个LegacyUser ,如果它是null那么migrateUser(doc, password)将会失败。 我喜欢做的是把内在的拒绝以某种方式传递给外在的诺言。

如何在nodejs中使用https.request

我使用github在我的节点应用程序中进行身份validation。 我已经构build了以下代码: var req = request(postOptions, function (res) { res.on('data', function (d) { … var getOptions = parseUrl('https://api.github.com/user?access_token=' + accessToken); … var req = request(getOptions, function (resp) { … resp.on('data', function (d) { … }) .on('end', function () { … }) }); req.end(); }); }); req.write(postData); req.end(); 我删除了一些代码,因为这里的重点是我有一个请求中的请求。 现在,nodejs已经推迟了问题是,如果这可以用来简化上面的代码?

Node.js Q承诺,为什么使用defer()的时候可以使用this()?

我想做一些事情: somePromiseFunc(value1) .then(function(value2, callback) { // insert the next then() into this function: funcWithCallback(callback); }) .then(function(dronesYouAreLookingFor){ // Have a party }) .done(); 它没有工作。 我无法得到它的工作。 我被build议使用defer()来达到这个目的。 他们自己的文档说,我们应该使用延迟callback式函数。 虽然这是令人困惑的,因为他们着名的金字塔榜样都是关于callback的,但是这个例子太抽象了。 因此,我看到很多使用defer的人,那就是我所做的: somePromiseFunc(value1) .then(function(value2) { var promise = q.defer(); funcWithCallback(function(err, dronesYouAreLookingFor){ if (!err) promise.resolve(dronesYouAreLookingFor); else promise.reject(new Error(err)); }); return promise.promise; }) .then(function(dronesYouAreLookingFor){ // Have a party }) .done(); 直到我通过检查源代码发现这也起作用: […]

如何在每个函数返回deferred.promise时链接函数数组的执行?

我已经在Node.js中使用延迟模块创build了我的第一个延迟对象,当我将结果传递给下一个函数并触发parsing和拒绝时,它工作的很好。当每个函数返回deferred.promise时,如何链接执行函数数组? 我有第一个函数的函数和input参数的input参数数组,每个下一个函数从前一个获取参数。 它的作用就像f1(100).then(f2).then(f3) ,但是当我有n个函数的时候。

连锁的承诺没有通过拒绝

我有一个问题,理解为什么拒绝不通过承诺链传递,我希望有人能够帮助我理解为什么。 对我来说,将function附加到一系列的承诺意味着我的意图是我依靠一个原始的承诺来实现。 这很难解释,所以让我首先展示一个我的问题的代码示例。 (注意:这个例子是使用Node和延迟节点模块,我用Dojo 1.8.3testing过,结果相同) var d = require("deferred"); var d1 = d(); var promise1 = d1.promise.then( function(wins) { console.log('promise1 resolved'); return wins;}, function(err) { console.log('promise1 rejected'); return err;}); var promise2 = promise1.then( function(wins) { console.log('promise2 resolved'); return wins;}, function(err) { console.log('promise2 rejected'); return err;}); var promise3 = promise2.then( function(wins) { console.log('promise3 resolved'); return wins;}, […]

了解延期执行链的语法

我正在学习JavaScript,真正学习JavaScript。 我来自PHP背景,所以一些JavaScript概念对我来说还是新的,特别是asynchronous编程。 这个问题可能已经被回答了很多次,但是我一直没有find答案。 这可能是因为除了举个例子之外,我甚至不知道怎么去问这个问题。 所以这里是: 当从npm使用延迟包时,我看到下面的例子: delayedAdd(2, 3)(function (result) { return result * result })(function (result) { console.log(result); // 25 }); 他们把这称为链接,它实际上工作,因为我目前正在使用这个代码来检查一个承诺是否解决或被拒绝。 尽pipe他们称之为链接,但它让我想起了像Swift那样的闭包。 我不明白这是什么types的链接,因为我们有一个函数调用,然后紧接在括号后面的一个匿名函数。 所以我想我有两个问题。 这是什么模式? 它是如何工作的? 这可能是一个加载的问题,但我想知道如何做的事情,所以当有人问我这个问题时,我可以给他们一个详细的解释。 这是delayedAdd函数: var delayedAdd = delay(function (a, b) { return a + b; }, 100); 它使用以下function: var delay = function (fn, timeout) { return function () { var […]