Tag: 承诺

在承诺触发之前,Firebase正在等待加载数据库数据

有人可以解释如何使用Firebase的承诺与我的代码如下: var p = new Promise(function(resolve, reject) { var data=null; var ref = db.ref("/"); ref.once("value", function(snapshot) { data = snapshot.val(); }); data.onload = function() { console.log(data+" onload"); if (data!=null) { resolve('Success!'); } else { reject('Failure!'); console.log('failed'); } } }); p.then(function() { /* do something with the result */ console.log(data+" done"); }).catch(function() { /* error 🙁 […]

用Promise对象返回一个函数的值

我正在拧getWebContent函数,返回使用Promise网页的内容(我也使用请求模块)。 我想使用这个函数的方式是var content = getWebContent() ,这样contentvariables就包含了请求的网站的数据。 我开始如下: var request = require('request') var getWebContent = function () { target = 'http://www.google.com'; var result = null; var get = function (url) { return new Promise(function (resolve, reject) { function reqCallback(err, res, body) { if (err) reject(err); else resolve(body); }; request(url, reqCallback); }); }; get(target).then(function (res) { result […]

使用mongodb和nodejs解决承诺

您好,我是nodejs和mongodb的新手,在解决第二个承诺后,我无法解决我的第一个承诺。 解决后我可以看到第二个承诺的结果。 这是我的代码 var getShows = function () { return new Promise(function (resolve, reject) { usersdb.find(function (err, result) { if(err) return console.error(err); var usersFromCall = result; var task = function (users) { return new Promise(function (resolve, reject) { var user = { 'name': '', 'pages': [] } user.name = users.show; console.log(users); pagedb.find({'show' : user.name}, function […]

我怎样才能使用承诺来捕捉错误,当他们可能不被包装在一个承诺?

背景 我正在使用承诺,我有许多function,可能会或可能不会返回一个承诺,可能会或可能不会失败,如下面的示例中: //does not return a Promise, simply a string let goodFun = function(){ return "I like bananas!"; }; //blows up! let badFun = function(){ throw "A general error blaahh!"; }; //You get the point … 由于这些函数可能会也可能不会返回Promises,并且可能会也可能不会失败,所以我需要等待所有这些函数的执行。 为了实现这一点,我有一个函数来调用它们,并等待它们的执行: let asyncFun = function(){ return Promise.all([badFun(), goodFun()]); }; 问题 到现在为止还挺好。 我的代码调用asyncFun ,我期望它的一些函数实际上失败。 为了做好准备,我加了一句话: let executor = function(){ […]

如何运行promise数组

在这个函数中,在内联数组完成之前调用callback函数。 我只能在内联具有所有的值时才能调用它? function inlineSearch( search, callback ) { const inline = [] mal.quickSearch( search ).then( response => { response.anime.forEach( anime => { anime.fetch( ).then( json => { inline.push( replyInline( json ) ) }) }) .then( callback( inline ) ) } ) } response.anime是一个json对象数组,指向另一个json对象,这就是为什么我需要获取它,所以我可以有正确的json。 而且, replyInline是一个只接受json并返回另一个的函数。 mal =我的动漫列表API

在我发送NodeJS响应之前,如何确保“for循环”内部的函数得到执行?

我为此使用蓝鸟。 我需要得到这个函数,即get_like_status(电子邮件,结果[i] .id),这是在我发送标题之前的for循环结束执行。 我控制数组列表时得到它未定义。 如果你可以使用蓝鸟,我将非常感激,但是我愿意承诺任何其他的软件包。 var list = new Array(); console.log(results.length); function get_like_status(email, project_id){ connection.query("SELECT email FROM likes WHERE liked_by='"+email+"' AND project_id='"+project_id+"';", function(err, results, fields){ if(err){console.log(err); return(err)}else{ if(results.length > 0){ console.log("yes"); return "yes"; }else{ console.log("yes"); return "no"; } } }) } for(var i=0; i < results.length; i++){ var empty = new Array(); list.push(empty); list[i].push(results[i].email); list[i].push(results[i].project_name); […]

如何在JavaScript中parsing后立即处理asynchronous结果?

我有一个asynchronous函数需要相当多的时间来callback,需要运行一个input数组,并将结果传递给后续操作。 我最初的方法是基于Promise的: Promise.all(entries.map((entry) => { return new Promise((resolve, reject) => { processEntry(entry, resolve); }); })).then((outputs) => { outputs.forEach((output) => { return console.log(output); }); callback(); }); 与此有关的问题是,输出只在得到解决之后得到处理(或在这种情况下logging)。 为了让他们尽快解决问题,我尝试了这种更老式的方法: var i = 0; entries.forEach((entry) => { processEntry(entry, (output) => { console.log(output); if (++i >= entries.length) callback(); }); }); 这适用于我特殊的情况,但似乎不是一个正确的通用解决scheme,因为不再保证输出顺序。 为了达到预期的效果,至今我可以想到的最好的方法是在entries填入输出为原始索引的数组,并且每当新的输出出现时,就用数组的起始处理输出单独的滑动索引,当它达到一个undefined时候停止。 有没有更好的方法来实现这一目标?

在存在之前等待承诺

我正在听用户事件,其中一些取决于其他人的完成 。 处理这些事件是一个asynchronous的任务 ,所以我使用承诺 。 比方说,我有这个: A -> B -> C -> … -> D -> E -> … -> F 我最初的做法是为A保存一个承诺,并使用A的承诺的方法附加B的处理。 B和C … D和D和E … F 。 但是这些事件几乎可以在同一时间发生 , B可以在A之前发生 。 既然我不能听一个不存在的承诺 ……你将如何解决这个问题? 我的想法是为每个级别(A,B,D) 定义一个对象 ,在这里我可以附加一个承诺和处理未来事件 。 当附上一个承诺时 ,我会重复处理未来的事件,然后将它们设置为诺言。 当附加未来的事件时 ,我会看看是否有承诺,并将其附加到它,或将其保存到数组或其他东西。 您是否知道已经解决了这个问题的现有解决scheme,还是应该遵循我的想法? 谢谢。 按要求进一步澄清: 我正在监听通过websocket(使用socket.io)转发到服务器的客户端多媒体事件。 事件的顺序确实是第一个A,然后是B等等,但是由于它们中的一些几乎同时发生,所以它们可以不按顺序处理。 示例代码 let promiseForA, promiseForB; socket.on('A', data => { […]

如何使用expressjs和mongodb使用promises /callback?

我真的很担心承诺和asynchronousJavaScript工作。 我想在/ user上执行一个GET并查询mongo,以便第一个查询的结果以某种方式处理以形成第二个查询的查询,并且该查询的结果是第三个查询的查询。 基本上我想通过res.send(result)将最终的mongo结果的结果发送回客户端。 这样做的正确方法是什么,以便客户端获得第二个嵌套的mongo查询结果200 OK? app.get('/user', function (req, res, next) { var query = {"isRegistered": false } db.collection('users', function (err, collection) { collection.find(query).toArray(function (err, result) { if (err) { console.log(err) } else { if (result.length > 0) { // do some random processing var randomUser = result[Math.floor(Math.random() * result.length)] // do ANOTHER db query […]

NodeJSasynchronous/等待导出variables

我再次破坏b *** s …我很抱歉不得不回到你们身边,但我发现网上提供的信息很混乱,似乎无法find一个适当的答案,我的问题。 所以如果你们中的一个能够帮助我的巫师/神灵,我将不胜感激。 我试图将一个承诺产生的variables导出到不同的模块。 这是我的代码: 主要的: //app.js <— This is where I need the variable exported. var sp1 = require('./module'); var somePromise2 = new Promise((resolve, reject) => { resolve('Hey! It worked the second time!'); }); async function exec() { const message1 = await sp1.msg const message2 = await somePromise2 console.log('Success', message1, message2); } […]