在C#中相当于承诺
在Scala中,有一个承诺课,可以用来手动完成未来.我正在寻找C#. 中的替代方案 我正在写一个测试,我希望它看起来与此相似: // var MyResult has a field `Header` var promise = new Promise; handlerMyEventsWithHandler( msg => promise.Complete(msg); ); // Wait for 2 seconds var myResult = promise.Future.Await(2000); Assert.Equals("my header", myResult.Header); 我知道这可能不是C#的正确模式,但是我也无法找到一种合理的方法来实现相同的事物,即使有一些不同的模式. 编辑:请注意,async/await在这里无济于事,因为我没有任务要等待!我只能访问将在另一个线程上运行的处理程序. 解决方案 在C#中
0 2024-04-12
编程技术问答社区
如何在AngularJS中使用$q从$broastcast中获得一个承诺
现在,我的控制器代码看起来像这样: $scope.spAPI.load(id).then(function(result){ var deferred = $q.defer(); if(result !== undefined){ deferred.resolve($rootScope.$broadcast("onSpLoaded", result)); } return deferred.promise; }).then(function(success){ $scope.modalInstance = $modal.open({ ... }); }); 我希望在处理广播后打开模态实例.有办法这样做吗? 更新:我正在考虑这个问题.无论如何,我打算在模态实例之后进行广播. . ps:我确实在modalinstance上遇到了问题.不过打了回调,我不得不解决它.我仍在努力正确使用$ q,我的代码越来越混乱. 解决方案
2 2024-04-03
编程技术问答社区
一个同步的Breeze ExecuteQuery
我使用Breeze Promise Promise ExecuteQuery获得数据表格: var getdata = function(){ var manager = new breeze.EntityManager(serviceName); var query = new EntityQuery().from('MyTable'); manager.executeQuery(query) .then(function(data){ //line1 console.log('success'); }); //line2 console.log('end'); } 有什么方法可以使此函数同步:不执行LINE2 UNTILL LINE1完成(或查询失败)? 谢谢 解决方案 否
2 2024-04-03
编程技术问答社区
使用breezejs的AngularJS数据服务不能解决承诺问题
我正在尝试在使用Breezejs的Angular应用程序中设置数据服务.解决诺言后,我无法得到.然后在控制器中提交.我正在通过数据服务中的微风从数据库中获取数据.我可以通过轻微的诺言,但我希望能够使用$ q.所有人都知道何时找到了我的所有数据. 在我的控制器 中 proapp.controller('caseinfocontroller', 功能casinfocontroller($ scope,$ log,$ timeout,casedataservice){ /***initialize data ***/ // initializeApp(); ATPinitializeApp(); function ATPinitializeApp() { $scope.MyStateList= caseDataService.getAllStates() .then(function assignSt
0 2024-04-03
编程技术问答社区
为什么我必须调用NgZone.run才能在Angular2中用breezejs更新我的视图?
我正在尝试学习Angular2,并使用ODATA WebAPI后端创建了一个测试应用程序. 在应用程序中,我的视图获取了一系列项目,我想在我的视图中显示这些内容. 对于从前端获取数据,我正在使用BreezeJS库,因为它已证明它可以节省很多时间,我喜欢将其与ODATA后端一起使用. 呼叫树和应用程序结构看起来像这样: 呼叫首先从视图调用服务功能开始获取项目(请注意,我正在从每个呼叫中​​返回ES-6承诺): this._scrumModuleService.fetchActiveSessions().then((sessions: ScrumSession[]) => { // Here i have to call zone.run else my view wont update. this._zone.run(() => { this.sessions = sessions; }); }).catch((error:
2 2024-04-03
编程技术问答社区
AngularJs控制台.log "$q没有定义"
我在控制台$q is not defined中遇到此错误.当我做一些研究时,我发现了一些东西,例如.q library has been deprecated 如果是这样,那么承诺的整个概念也被弃用, 解决方案 诺言没有弃用.实际上,他们最近获得了很多动力,并且包括在下一版本的JavaScript中. 让我们看一下他们说的话: 这个微风.Engular.Q库已弃用.它被微风的角度服务所取代,该服务更干净地配置微风以进行角发育. 微风角服务告诉Breeze使用Angular's $q进行承诺,并将Angular's $http用于AJAX调用. 他们所说的是,微风使用Angular自己的承诺,而不是其自己的breeze.angular.q,它使用了Q的承诺,这些承诺比Angular使用的承诺更重,但也比$q更重.这只是一个API更改. 在角度代码中,您可以使用依赖注入来获得$q例如使用简单的语法: myApp.controller("MyCtr
0 2024-04-03
编程技术问答社区
使用jQuery或Q.Js进行承诺
我正在研究 breezejs ,其中样本使用 q.js 保证处理异步呼叫. John Papa 也在使用Q. 解决方案 两者都基于 Q有例外的处理.异步then回调中的所有抛出错误都将被抓住并拒绝承诺(并且只有在调用.end()时才会重新申请).不确定我个人是否喜欢.这是jQuery不遵循的标准化方式,在jQuery deferreds中拒绝then拒绝更为复杂... Q承诺通过单个值/原因(例如您从then返回/将其扔到)中,而JQuery允许在其延迟时进行多个参数. . q有很多 q具有 .all 和similiar,它们在jQuery中更为复杂($.when.apply($, […])). Q在事件循环中确实可以与壁虱明确合作并保证异步,而jQuery也可以同步.现在,这是 …基本上是其他解决方案 jQuery的承诺实施诺言/规格有一些实际问题.以下链接描述了它们的描述远胜于我:失踪宣传 其他解决方案 Bergi的答案很好地涵盖了事物.不过,我想补充一点,我们已
0 2024-04-03
编程技术问答社区
如何正确突破承诺链?
基于这里的问题: jquery链接和级联a>和公认的答案,我想在某个时候打破承诺链,但尚未找到正确的方法.有 =" https://stackoverflow.com/questions/20714460/break-promise-chain-chain-and-call-a-call-a-function--n-the-the-step-in-the-chain-where-it-IT"> posts a> 关于 . 从原始问题中获取示例代码: Menus.getCantinas().then(function(cantinas){ // `then` is how we chain promises Menus.cantinas = cantinas; // if we need to aggregate more than one promise, we `$.when` return $.when(Menus.getMeals(cantina
2 2024-04-03
编程技术问答社区
如何承诺一个Braintree方法?
我很难承诺出现Braintree方法.具体来说,gateway.transaction.sale. https://developers.braintreepers.braintreepayments.com/reference.com/reference/request/request/request/transaction/transaction/sale/node/node.node.node 我正在与bluebird库一起使用node.js进行合理化. ... var sale = bluebird.promisify(gateway.transaction.sale); return sale({ amount: '10.00', paymentMethodNonce: nonce, }); }) .then( // doesn't reach here) .catch(// logs out erro
0 2024-04-03
编程技术问答社区
在节点中按特定顺序调用模块
我已经使用以下代码调用两个模块,但是在验证文件之前调用了调用操作(我在调试中看到).在appHandler.invokeAction之前,我应该做什么来验证validateFile?我应该使用诺言吗? var validator = require('../uti/valid').validateFile(); var appHandler = require('../contr/Handler'); appHandler.invokeAction(req, res); 更新 这是验证文件代码 var called = false; var glob = require('glob'), fs = require('fs'); module.exports = { validateFile: function () { glob("myfolder/*.json", function (err, files) {
2 2024-04-01
编程技术问答社区
青鸟的承诺是未定义的?
我正在使用节点4.5+和蓝鸟.我有以下我打算与then一起使用的代码: var checkdir = function(directory) { return new Promise(function(resolve, reject) { fs.statAsync(directory).then(function() { resolve(true); }).catch(function(err) { if(err.code === 'ENOENT') { fs.mkdirAsync(directory).then(function() { resolve(true); }).catch(function() { reject(new Error('Can
0 2024-04-01
编程技术问答社区
当第一个承诺得到解决时返回
目标 我在数组中有很多文件名,并想读取存在的第一个文件的内容.它们是配置文件,因此订单是确定性的,因此我不能使用.race()很重要.我的版本在每个文件上都在地图下方的地图下,试图加载它,如果它成功加载,则可以解决调用. 问题 以下是此实施的几个问题: 呼叫resolve(...)实际上并未退出循环,因此即使在不需要的情况下,程序也打开列表中的每个文件. 拒绝条件(在this is required to reject when we don't receive any files上)似乎是一个黑客.但是,如果不在这里,则永远不会拒绝承诺. 该解决方案似乎是可疑的,就像一个承诺的反模式一样. 有什么更好的方法来构建此问题吗?我可能可以使用一个Promise.filter呼叫来完成,但是如果不需要,我不想查询每个文件. 谢谢 代码 var Promise = require('bluebird'); var fs = Promise.pr
0 2024-04-01
编程技术问答社区
蓝鸟承诺,promise.each只执行一次
有一个称为MusicPromise()的函数.此功能的作用是 它获取所有MP4文件并通过它循环. 然后使用fluent-ffmpeg 尝试将每个MP4转换为MP3 我面临的问题是 它仅转换1个文件,无论我有多少个MP4文件. ,似乎永远不会到达proc.on('end', (x) => { 完整的代码: // search const glob = require('glob'); // wait for const Promise = require('bluebird'); // fs const fs = require('fs'); // mp3 const ffmpeg = require('fluent-ffmpeg'); // video source file path const videoPath = '/home/kenpeter/Videos/4K\ Video\ Downloader'; // audio source
4 2024-04-01
编程技术问答社区
用Bluebird承诺一个功能
我是JavaScript异步概念的新手,来自C ++背景.最近,我意识到我的某些功能不起作用,因为它们没有回报承诺. 例如,此功能; var CSVConverter=require("csvtojson").Converter; function get_json(cvs_file_location) { var data=fs.readFileSync(cvs_file_location).toString(); var csvConverter=new CSVConverter(); csvConverter.fromString(data,function(err,jsonObj){ if (err){ console.log("error msg: " + err); return null; } var json_csv = clone_o
2 2024-04-01
编程技术问答社区
如何用bluebird处置被拒绝的承诺中的资源?
拒绝承诺时如何处置序列? 处置函数打印了被拒绝的承诺的错误. 未经处理的拒绝类型:无法称呼方法为 未定义 var pingPort = function(port){ return new promise(function(resolve, reject){ var serial = new com.SerialPort(port.comName, { baudrate: 19200, parser: com.parsers.readline(lineEnd) }, false); serial.on("data", function(data){ if (data === responseUuid){ resolve(serial); } }); seri
2 2024-04-01
编程技术问答社区
蓝鸟承诺重试DocumentDB请求
我试图将带回电的重试功能重写为蓝鸟的承诺,但似乎无法使我的头保持正确的方式.底部是在满足限制时重试Azure DocumentDB的工作回调功能.我正在尝试在功能本身中使用承诺,但是在达到"然后"之前它返回.关于如何解决此问题的任何提示,或者是否通过使用这种方式影响性能会受到影响.谢谢你! "readDocRetry": function(id, retries) { var self = this; return new Promise(function(resolve, reject){ self.client.readDocumentAsync(self.docsLink + id, null, function(err, data){ if (err) { reject
0 2024-04-01
编程技术问答社区
顺序执行Promise
我有以下实施的承诺功能,例如 return new Promise(function(resolve, reject) { //logic }); cart.getbasket(req) cart.updatebasket(req) CART.UPDATEDEFAULTSHAIP(REQ) cart.getBasketObject(basket) 目前我使用 执行代码 app.post('/Billing', function(req, res) { cart.getBasket(req).then(function(basket) { cart.updateBasket(req).then(function() { cart.updateDefaultShipment(req).then(function(basket) { cart.getB
2 2024-04-01
编程技术问答社区
如何在循环中调用Promise函数并保存其返回值
我创建了一个Promist函数(using bluebird)称为getBasketObject.此功能期望一个篮子作为一个参数,而不是从中退还新的basketObject. basketObject具有一些变量,例如tax, total, shipping和productItems.现在,ProductiTems对象中有price, name, quantity属性可用,但没有productImageLink可用. 为了获得productImageLink,我对端点进行了一个新的async调用,这将使我能给我带来产品图像对象. Image Endpoint也被实施为承诺. 现在,我在productLineItems上循环并获取name, price, quantity之类的属性值,最后呼叫以获取图像. 现在,如果我添加 basketObj["products"][productId]["productImageSrc"] = smallImage[0];我
2 2024-04-01
编程技术问答社区
用Bluebird/NodeJS Promises调换 "then "的参数顺序
我的功能异步从服务器中获取值: var request = require('request'); Promise.promisifyAll(request); function getValue(){ return request.getAsync('http://www.google.com') .then(function(resp){ return resp.body; }) .catch(function(err){ thow err; }); } 我想取这个值并将其转储到文件: var fs = require('fs'); Promise.promisifyAll(fs); getValue().then(fs.writeFileAsync, "file.html"); 问题是fs.writeFileAsync期望参数一个是文件,而参数二是数据,但是getValue()返回数据.这是错误的说法: Unhand
0 2024-04-01
编程技术问答社区