更新了Promise示例。
我正在运行NodeJS,并且在多个if
-语句和return
-语句中遇到问题。我正在尝试使用promise
,这似乎是一种方法。
这是我的示例代码:
const express = require('express');
const app = express();
const pgPromise = require('pg-promise')();
const db = pgPromise(CONNECTION_STRING);
app.use((req, res) => {
var message = "";
promise1 = new Promise((resolve, reject) => {
message += "promise1";
if (false) {
reject(message);
}
});
promise2 = new Promise((resolve, reject) => {
if (true) {
db.one('SELECT 1')
.then(row => {
message += " promise2";
resolve(message);
})
.catch(err => {
message += " error";
reject(message);
});
}
});
var printResult = (results) => {console.log("Results = ", results, "message = ", message)}
Promise.all([promise1, promise2]).then(printResult);
return res.json({ message: message });
});
app.listen(3000);
它似乎没有等待Promise2完成数据库查询。
如何确保在返回任何语句之前完成数据库查询?
因为Node JS是异步运行的,所以它不会在执行最后一行之前等待input1、inpu2、input3完成(返回res.json({错误:false});)。
您需要使用Promise来处理序列。找到下面的代码。
let input1 = new Promise(function (resolve, reject) {
if (typeof req.body.input1 != "undefined") {
// do something
resolve('Success');
} else {
reject('Error');
}
});
let input2 = new Promise(function (resolve, reject) {
if (typeof req.body.input2 != "undefined") {
// do something
resolve('Success');
} else {
reject('Error');
}
});
let input3 = new Promise(function (resolve, reject) {
if (typeof req.body.input3 != "undefined") {
// do something
resolve('Success');
} else {
reject('Error');
}
});
input1.then((value) => {
return res.json({ error: true });
})
.catch((e) => {
input2.then((value) => {
return res.json({ error: true });
})
.catch((e) => {
input3.then((value) => {
return res.json({ error: true });
})
.catch((e) => {
return res.json({ error: false });
})
})
})
如果您想异步处理所有输入,请使用promise。全部()。
代码的执行不会因为promise而停止。总之,您需要将return语句移动到Promise。全部收回,并归还promise返回的promise。全部的
return Promise.all([promise1, promise2]).then(() => {
printResult();
return res.json({ message: message });
});
我使用Apache POI v3.12有以下问题:我需要使用49行[0…48]的XLSX文件作为模板,用数据填充它的单元格并将其写成不同的文件,这样我就可以再次重用模板。我正在做的大约是这样的: /稍后/ 经过调试,getRow()返回null,但是尝试。createRow()失败,原因是: 我在这里错过了什么吗?据我在 Apache 文档和论坛中读到的,如果 getRow() 返回 null,我
我正在从第三方网站(家庭用电)检索JSON,根据我从网站请求的内容,返回的JSON可能是也可能不是数组。例如,如果我请求我的智能电表列表,我会得到这个(由于尺寸大,结果被截断): 其中 gwrcmd 是单个元素。 但是如果我要求过去半个小时的用电,我会得到这个: 看看 gwrcmd 现在是一个数组吗? 在我的Go应用程序中,我有一个类似这样的结构(再次,被截断,因为它持续了一段时间。“版本”下有更
因为我没学过c语言,标题可能有许多错误,请见谅。 我用electron开发一个桌面软件,需要获取exe文件的图标(不要app.getFileIcon这东西),在网上找了一圈没有可用的。最理想的是extracticon.exe,但它只能生成png文件 我需要ReadableStream 或 Buffer Electron: [c#] exeToPng.exe: 参考ExtractIcon源码 如果返
如何使用java8流过滤列表,如果找到的元素是过滤列表中唯一的元素,则返回该元素,否则(如果有更多的元素满足条件,或者没有满足条件的结果)返回例如 我需要这样的东西: 但我想知道我是否可以在一个单一的流中做到这一点? 有单一的流解决方案吗?
我正在尝试使用数据库的第一个图像设置ImageView。由于某种原因,它不起作用,我不知道为什么。方法loadImage在不同的类中调用。 我还试着用一个单独的方法设置图像,但我需要在创建整个舞台场景等的同时调用它,即使从第二个方法那样调用它,它也不起作用。 这是持有setImage的类 当调用时,设置图像会给我一个null值,imageview的默认值为null,但实际上我正在加载一个图像,甚至
我用的是parse.com。每个包里面都有很多钻子,每个品类里面都有很多包。 我卡住了。然后(函数(result,result2,result3)在最后一行。promise可以有多个promise,它是可变的。有没有一种方法可以写出如下内容: 谢谢!