网站搜索
在以下代码中,我有一个无限循环,我不知道为什么会发生。我的最佳猜测是因为里面的函数是 async 的,循环不会等待它,所以循环永远不会停止。解决这个问题的最佳方法是什么?
var generateToken = function(userId) { return new Promise(function(resolve, reject) { User.findOne({userId: userId}, function(err, user) { if (user !== null) { var loop = true; while (loop) { 阅读更多 →
我希望当出现类型错误时,浏览器显示错误信息。错误如 无法读取未定义的某个属性 或 未定义的引用。
new Promise(function(resolve,reject){ // do stuff ... reject('something logical is wrong'); }).catch(e => console.error(e)); new Promise(function(resolve,reject){ // do stuff, and a syntax error :/ var a = { }; a.something.o 阅读更多 →如果一个 then 处理函数没有 return 语句,那么在 bluebird 中,结果链式 Promise 的值将是 undefined。但是我在 Promises/A+ 或任何地方都看不到有明确说明这个行为。这种行为可以依赖吗?
这是一个测试程序:
var Promise = require('bluebird'); var p = Promise.resolve('test'); p.then(function(s) { console.log('s1='+s); // no return }).then(function(s) { // bluebird prints "undefined". is this specified by a standard? console.log('s2='+s); });
所以我在使用 JavaScript Promises 时遇到了问题。我为了减少依赖,使用的是原生实现。
我所需要的一个说明性例子。
我需要获取书籍、书籍作者和购买记录的列表。我还需要每位作者的作者资料。在得到所有这些信息之后,我需要创建一套完整的作者及其书籍,并为每本书生成购买列表。
列表和简介是独立的 API JSON 调用。唯一的依赖是我需要一个作者列表才能获取作者简介。
我已经用 Promise 解决了这个问题。我使用 Promise.all 来获取 3 个 API 的 JSON 请求:作者、书籍和购买。我又使用了另一个 Pro
阅读更多 →
"use strict"; let assert = require("assert"); describe("Promise test", function() { it('should pass', function(done) { var a = {}; var b = {}; a.key = 124; b.key = 567; let p = new Promise(function(resolve, reject) { setTimeout(function() { resolve(); }, 100) }); p.then(function success() { console.log("success---->", a, b); assert.deepEqual(a, b, "response doesnot match"); done(); }, function
阅读更多 →
我正在尝试对从数据库获取的一列表中的多个项目执行异步例程,但我不太理解 promise.all 是如何工作的以及它的作用。
这是我现在正在使用的代码:
/** * Queues up price updates */ function updatePrices() { console.log("~~~ Now updating all listing prices from Amazon API ~~~"); //Grabs the listings from the database, this part works fine fetchListings().then(function(listings) 阅读更多 →
我得到的是动态的(每次运行时承诺的数量可以改变)承诺数组,现在我希望在每个承诺解析或拒绝后,在承诺数组完成之前处理返回的承诺。
我尝试了Promise.all,但它在所有承诺完成后仍会继续。
如果数组(包含的都是 Promise)不是动态的,我就可以简单地使用类似这样的方式,但我不知道数组里有多少个 Promise,并且我希望在每个 Promise 执行完毕后就处理它的结果,而不是等到所有 Promise 都完成
firstMethod() .then(secondMethod) .then(thirdMethod);我们正在使用 Q
阅读更多 →
为什么 Promise.all() 允许将任何对象作为可迭代对象传入?
示例(jsfiddle:https://jsfiddle.net/npqgpcud/6/):
var promise1 = "one"; var promise2 = 2222; var promise3 = new Promise(function (fulfill, reject) { fulfill("three"); }); Promise.all([promise1, promise2, promise3]).then(results => { p1.innerHTML = results[ 阅读更多 →
由于 await 在 Array.map 或 Array.reduce 中不起作用,你能像下面这样做吗,还是会被认为是滥用 Promise.all?通常,neo4j.session() 会被 await。
// inside a function const QUERY = 'MATCH (n) RETURN n' const argsArray = 阅读更多 →
首先,我熟悉异步/同步函数的概念。也有很多与我的问题相关的问题。但我在任何地方都找不到我的答案。
所以问题是:有没有一种方法可以使用 async/await 返回一个值,而不是返回 Promise?像同步函数那样。
例如:
async doStuff(param) { return await new Promise((resolve, reject) => { setTimeout(() => { 阅读更多 →