Questions tagged «promise»

承诺是延迟计算的一种策略,适用于多种并发样式:用于本地计算的线程和事件循环并发,以及同步和异步远程消息传递。一个promise表示异步操作的最终结果。处理承诺的主要方式是通过注册从承诺的最终值或失败原因到新承诺的转换的方法。

5
承诺,传递其他参数然后链接
一个承诺,例如: var P = new Promise(function (resolve, reject) { var a = 5; if (a) { setTimeout(function(){ resolve(a); }, 3000); } else { reject(a); } }); 在我们调用之后,然后在promise上的方法: P.then(doWork('text')); doWork函数如下所示: function doWork(data) { return function(text) { // sample function to console log consoleToLog(data); consoleToLog(b); } } 如何避免在doWork中返回内部函数,以便从promise和text参数访问数据?是否有避免内部功能的技巧?

2
TypeError:无法读取未定义的属性“ then”
loginService.islogged() 上面的函数返回类似“ failed”的字符串。但是,当我尝试运行然后对其执行功能时,它将返回以下错误 TypeError: Cannot read property 'then' of undefined 并且光标指示在connected之前和之后.then。 以下是全部功能: var connected=loginService.islogged(); alert(connected); connected.then(function(msg){ alert("connected value is "+connected); alert("msg.data value is "+msg.data); if(!msg.data.account_session || loginService.islogged()=="failed") $location.path('/login'); }); 更新 这是islogged()功能 islogged:function(){ var cUid=sessionService.get('uid'); alert("in loginServce, cuid is "+cUid); var $checkSessionServer=$http.post('data/check_session.php?cUid='+cUid); $checkSessionServer.then(function(){ alert("session check returned!"); console.log("checkSessionServer is "+$checkSessionServer); return $checkSessionServer; …

2
解决后,为什么javascript ES6 Promises继续执行?
据我了解,promise是可以resolve()或reject()的东西,但令我惊讶的是,发现promise中的代码在调用了resolve或reject之后仍继续执行。 我认为resolve或reject是exit或return的异步友好版本,它将终止所有立即执行的函数。 有人可以解释为什么下面的示例有时会在resolve调用后显示console.log的原因: var call = function() { return new Promise(function(resolve, reject) { resolve(); console.log("Doing more stuff, should not be visible after a resolve!"); }); }; call().then(function() { console.log("resolved"); }); jsbin

5
JavaScript promise和async await有什么区别?
我已经在移动应用程序和Web应用程序中使用了ECMAScript 6和ECMAScript 7功能(由于Babel)。 第一步显然是达到ECMAScript 6级别。我学习了许多异步模式,promise(确实很有希望),生成器(不确定为什么使用*符号)等。其中,promise非常适合我的目的。我已经在我的应用程序中使用它们很多次了。 这是我如何实现基本诺言的示例/伪代码- var myPromise = new Promise( function (resolve,reject) { var x = MyDataStore(myObj); resolve(x); }); myPromise.then( function (x) { init(x); }); 随着时间的流逝,我遇到了ECMAScript 7功能,其中之一是ASYNC和AWAIT关键字/功能。这些结合在一起创造了很大的奇迹。我已经开始用代替我的一些诺言async & await。它们似乎为编程风格增加了巨大的价值。 同样,这是我的async,await函数的伪代码,如下所示: async function myAsyncFunction (myObj) { var x = new MyDataStore(myObj); return await x.init(); } var returnVal = await myAsyncFunction(obj); …

3
Promise.all()。then()解决吗?
使用节点4.x。当您有Promise.all(promises).then()什么正确的方法来解析数据并将其传递给下一个.then()? 我想做这样的事情: Promise.all(promises).then(function(data){ // Do something with the data here }).then(function(data){ // Do more stuff here }); 但是我不确定如何将数据发送到第二个.then()。我不能resolve(...)先用.then()。我知道我可以做到这一点: return Promise.all(promises).then(function(data){ // Do something with the data here return data; }).then(function(data){ // Do more stuff here }); 但这似乎不是执行此操作的正确方法...正确的方法是什么?

8
用Node.js中的promise替换回调
我有一个简单的节点模块,该模块连接到数据库,并具有几个接收数据的功能,例如此功能: dbConnection.js: import mysql from 'mysql'; const connection = mysql.createConnection({ host: 'localhost', user: 'user', password: 'password', database: 'db' }); export default { getUsers(callback) { connection.connect(() => { connection.query('SELECT * FROM Users', (err, result) => { if (!err){ callback(result); } }); }); } }; 该模块将从另一个节点模块中以这种方式调用: app.js: import dbCon from './dbConnection.js'; dbCon.getUsers(console.log); …

2
Promise.resolve与新Promise(resolve)
我使用的是bluebird,我看到了两种将同步功能解析为Promise的方法,但是我没有得到两种方法之间的区别。看起来stacktrace有点不同,所以它们不只是一个alias,对吗? 那么首选的方法是什么? 方式A function someFunction(someObject) { return new Promise(function(resolve) { someObject.resolved = true; resolve(someObject); }); } 方式B function someFunction(someObject) { someObject.resolved = true; return Promise.resolve(someObject); }

1
永远不会解决的承诺会导致内存泄漏吗?
我有一个Promise。我创建它是为了取消AJAX请求(如果需要)。但是由于我不需要取消该AJAX,因此我从未解决过该问题,因此AJAX成功完成了。 简化的代码段: var defer = $q.defer(); $http({url: 'example.com/some/api', timeout: defer.promise}).success(function(data) { // do something }); // Never defer.resolve() because I don't need to cancel that ajax. What happens to this promise after request? 永远不会解决那样的承诺会导致内存泄漏吗?您对如何管理Promise生命周期有任何建议吗?

2
如何通过setTimeout做出承诺
这不是现实问题,我只是想了解如何创建承诺。 我需要了解如何对不返回任何内容的函数(例如setTimeout)作出承诺。 假设我有: function async(callback){ setTimeout(function(){ callback(); }, 5000); } async(function(){ console.log('async called back'); }); 如何创建async可以在setTimeout准备就绪后返回的承诺callback()? 我以为包装会带我到某处: function setTimeoutReturnPromise(){ function promise(){} promise.prototype.then = function() { console.log('timed out'); }; setTimeout(function(){ return ??? },2000); return promise; } 但是我不能不考虑这个。

9
承诺-是否可以强制取消承诺
我使用ES6 Promises来管理我的所有网络数据检索,并且在某些情况下需要强制取消它们。 基本上,这种情况是这样的:我在UI上进行了预先输入搜索,在该UI中,将请求委派给后端必须基于部分输入执行搜索。尽管此网络请求(#1)可能需要一点时间,但用户继续输入,最终会触发另一个后端调用(#2) 这里#2自然优先于#1,因此我想取消Promise包装请求#1。我已经在数据层中缓存了所有Promises,因此从理论上讲,我可以在尝试提交#2的Promise时检索它。 但是,一旦从缓存中检索Promise#1,该如何取消呢? 有人可以建议一种方法吗?

6
在承诺捕获中重新抛出错误
我在一个教程中找到了以下代码: promise.then(function(result){ //some code }).catch(function(error) { throw(error); }); 我有点困惑:catch调用可以完成任何事情吗?在我看来,它没有任何作用,因为它只会引发与捕获的错误相同的错误。我基于常规try / catch的工作原理。


9
您如何正确地从诺言中返回多个值?
我最近几次遇到某种情况,但我不知道如何正确解决。假设以下代码: somethingAsync() .then( afterSomething ) .then( afterSomethingElse ) function afterSomething( amazingData ) { return processAsync( amazingData ); } function afterSomethingElse( processedData ) { } 现在可能会出现我想访问amazingDatain的情况afterSomethingElse。 一种明显的解决方案是从中返回数组或哈希afterSomething,因为好了,您只能从函数中返回一个值。但是我想知道是否有办法afterSomethingElse接受2个参数并同样调用它,因为这似乎很容易记录和理解。 我只是想知道这种可能性,因为存在Q.spread,它的功能类似于我想要的。
86 javascript  promise  q 

3
那么如何处理if-else中的诺言?
在某些情况下,当我从promise对象获得返回值时,我需要then()根据值的条件启动两个不同的进项,例如: promise().then(function(value){ if(//true) { // do something } else { // do something } }) 我在想也许我可以这样写: promise().then(function(value){ if(//true) { // call a new function which will return a new promise object ifTruePromise().then(); } else { ifFalsePromise().then(); } }) 但与此同时,我有两个问题: 我不确定开始一个新的诺言是否是个好主意,然后在诺言中进行。 如果我需要两个进程在最后一个函数中调用怎么办?这意味着它们具有相同的“终端” 我试图返回新的承诺,以保持原始链像: promise().then(function(value){ if(//true) { // call a new function …

1
如何从内部拒绝承诺然后起作用
这可能是一个愚蠢的问题,但是在诺言链中间,您如何从then函数之一内部拒绝诺言呢?例如: someActionThatReturnsAPromise() .then(function(resource) { return modifyResource(resource) }) .then(function(modifiedResource) { if (!isValid(modifiedResource)) { var validationError = getValidationError(modifiedResource); // fail promise with validationError } }) .catch(function() { // oh noes }); 不再引用原始的解析/拒绝函数或PromiseResolver。我应该补充return Promise.reject(validationError);吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.