Articles of 承诺

承诺拒绝“…未定义”,我如何find源

我的应用程序有很多模块,并在各地使用承诺。 有时候,在这些模块的其中一个模块中,我的代码会抛出一个exception,promise链被拒绝。 如果这个错误是可重复的,我可以单步执行,直到findexception。 但事实并非如此。 如何让nodejs生成一个回溯来识别有罪的模块,函数和代码行? 这是一个微不足道的例子。 'use strict'; // pretend multiple modules, each with deep complicated chains of Promises Promise.resolve() .then(() => { return Promise.resolve() }) .then(() => { return Promise.resolve() }) .then(() => { return Promise.resolve() }) .then(() => { x = "find me if you can, x is very common variable name"; return […]

获取Sequelize Promise的内容而不执行它

我知道这可能是一个奇怪的问题,从现在开始我很抱歉。 让我们来像我这样一个容易的东西。 let query = User.findAll({where: {name: 'something'}}) 有没有一种方法可以让我访问query的内容。 而内容的意思是使用User.findAll生成的事实,我不关心User.findAll .then()的结果。

使用数据库和服务器的承诺

即时通讯仍然在学习js,但即时通讯尝试在nodejs中编写一个基本的服务器。 服务器应该采取查询,然后从数据库返回一个JSON。 我试图使用承诺,但可以得到我的头。 我的服务器返回一个空的答复。 那么我做错了什么? 到目前为止我的服务器文件(简体): http.createServer(function (request, response) { if (request.method === "GET") { … var dbRes = dbFunc.getFromDB(query); response.statusCode = 200; response.setHeader('Content-Type', 'application/json'); response.end(JSON.stringify(dbRes)); } }).listen(port); 我的数据库文件到目前为止(简体): exports.readHandeler = function (query) { var promise = new Promise(function(resolve, reject) { db.collection('data').find(query).toArray(function(err, res) { if (err) { throw err; reject(-1); } resolve(res); } }); promise.then(function(result) […]

使用asynchronous和等待减less

我知道,其他文章涵盖了这个问题,但我需要使用它作为const所以它只是在运行时初始化 这是我的问题,我是nodejs的新手,并在网上search了很多。 没有find任何解决scheme接近我的需要 const apis = ['log', 'get', 'all'] const loggers = apis.reduce(async (memo, api) => { try { await fs.stat(path.join(process.cwd() + config.application.log.dir, api)); } catch (e) { await fs.mkdir(path.join(process.cwd() + config.application.log.dir, api)); } memo[api] = new (winston.Logger)({ transports: [ new winston.transports.File({ timestamp: () => (new Date().toLocaleTimeString()), datePattern: 'yyyy-MM-dd', level: config.application.mode === 'test' ? 'emerg' […]

承诺链接error handling

我正在学习如何在没有库的情况下使用Promise。 从我所读到的,我可以将Promise链接在一起,然后添加.catch来处理错误。 我期望什么 所以,如果我把URL改成一些错误的URL,我不应该捕捉错误,并停止整个程序继续? 我现在看到了什么? 当我把一个错误的url,程序只是抛出一个错误,而不是像拒绝处理它。 const request = require("request"); new Promise((resolve, reject) => { request( "http://maps.googleapis.com/maps/api/geocode/json?address=321%20i%20st%20davis", (err, res, body) => { if (err) { reject("bad call on geo code!"); } resolve(JSON.parse(body).results[0].geometry.location); } ); }) .then(res => { const {lat, lng} = res; return new Promise((resolve, reject) => { request( `https://api.darksky.net/forecast/6fb416a8313aabd902a22558e07cc032/${lat},${lng}`, (err, res, body) => […]

节点/ vue.jsunit testing的承诺,如何正确写入?

基本上,我试图testing下面的vex / action: export default { login (context, payload) { return vueAuthInstance.login(payload.user, payload.requestOptions) .then((response) => { if (JSON.stringify(response.data) !== '{}') { return true } else { return false } }) } } 我有一个依赖vueAuthInstance我需要存根/模拟…它被调用,它有一个login函数,有两个参数,它返回一个对象(响应)与数据属性 vueAuthInstance = {login: sinon.stub().withArgs({email: 'email', password: 'password'}, 'options').return({data: 'user_data_with_token'}) } 我的login函数实际上就像调用vueAuthInstance存根,所以我应该可以写 actions.login(context, payload).then((response) => { expect(response).to.eql(true) }) 但我被locking在一个正确的testing describe('login', () => { […]

如何在for循环中运行一个项目的函数,然后再转到下一个项目?

for (var x = 0; x < emails.length; x++){ var email = emails[x]["email"]; client.single.check(email, true, true).then( result => { if (result.getNumericResult() == 0){ console.log("valid email: "+email); var verified = 1; admin.database().ref("/users/"+userID+"/emails/"+x+"/verified").set(verified, function(error){ if (error) { console.log("User ("+userID+") email state could not be saved" + error); } console.log("Saved"); }); } }, err => console.log('ERROR: ' + […]

NodeJS – find未处理的承诺拒绝行

我正在使用一个事件处理程序来捕获在SO上发现的未处理的诺言拒绝: process.on('unhandledRejection', function(error, promise) { console.error('UNHANDLED REJECTION – Promise: ', promise, ', Error: ', error, ').'); }); 由于我使用的是nodejs + express,因此打印出代码语句的行号非常困难。 我有一个自定义的console.log2方法这样做,但我试图完成与拒绝处理程序相同。 我已经尝试了错误堆栈等各种调用方/堆栈跟踪技巧,但这些方法都没有正确显示reject()语句的行。 编辑 为了澄清,我得到的打印输出不断显示上面的console.error语句的行号(每次都是同一行),然后通过各种承诺库文件/行向后工作。 它完全跳过/忽略了reject()语句本身所在的行。

NodeJS中的嵌套promise

我在NodeJS中编写一个服务,它检索一个Items列表。 对于每一个,我必须创build一个计数器,指示可用项目的数量。 所以,如果商品出现在商店里,柜台只是增加和解决承诺(因为我相信最多只有一个库存)。 否则,如果在库存中,我必须检查可用件的确切数量。 如果它不是以前的两个案例之一,我会解决承诺,然后转到下一个项目。 问题在于第二种情况,因为在解决(当前项目的)主要承诺之前,我必须等待调用来检索仓库中的零件计数器。 由于它是一个asynchronous代码,当它进入第二个“else”时,它会触发库存中的计件器的调用,并立即parsing承诺,而不用等待调用结束。 我怎样才能解决这个承诺的连接? 这是代码: let promises: any[] = []; for (let i = 0, itemsLength = itemList.length; i < itemsLength; i++) { let currentItem = itemList[i]; promises.push( new Promise(function(resolve: Function, reject: Function) { act({ …call the service to retrieve the item list }) .then(function(senecaResponse: SenecaResponse < any > ) { […]

处理promise.reject尝试catch或promise.catch

我对承诺的理解并不完美。 所以我不确定哪个代码是正确的方式来处理错误和exception情况。 请帮我写正确的代码。 1。 尝试 – 赶上续集者的诺言 async function doGetAdminList(adminName) { let adminList; try { adminList = await sequelize.query( sqls.GET_ADMIN_LIST, { replacements: { adminName: adminName }, type: sequelize.QueryTypes.SELECT } ); } catch (e) { return Promise.reject({status:500, message: "SQL Error" }); } if (!adminList || !Object.keys(adminList).length) { log.info('\nadminList not found :\n'); return Promise.reject({status:400, message: 'adminList not […]