考虑以下两个例子......
function test1() {
return new Promise(function () {
return 123;
});
}
test1()
.then(function (data) {
console.log("DATA:", data);
return 456;
})
.then(function (value) {
console.log("VALUE:", value);
});
Run Code Online (Sandbox Code Playgroud)
它什么也没输出.
function test2() {
return new Promise(function (resolve, reject) {
resolve(123);
});
}
test2()
.then(function (data) {
console.log("DATA:", data);
return 456;
})
.then(function (value) {
console.log("VALUE:", value);
});
Run Code Online (Sandbox Code Playgroud)
它输出:
DATA: 123
VALUE: 456
Run Code Online (Sandbox Code Playgroud)
promise构造函数不能简单地解析TEST 1中的返回值有什么缺点或规范矛盾?
为什么它必须与TEST 2中的结果不同?
我试图理解构造的promise对象如何根据promise规范与可能的对象不同.
我已经实现了自己的自定义错误:
function MyError() {
var temp = Error.apply(this, arguments);
temp.name = this.name = 'MyError';
this.stack = temp.stack;
this.message = temp.message;
}
MyError.prototype = Object.create(Error.prototype, {
constructor: {
value: MyError,
writable: true,
configurable: true
}
});
Run Code Online (Sandbox Code Playgroud)
而我所缺少的是让它在屏幕上显示,就像发生常规的无法错误时一样,即如果我们这样做throw new Error('Hello!'),我们得到输出:
throw new Error('Hello!');
^
Error: Hello!
at Object.<anonymous> (D:\NodeJS\tests\test1.js:28:7)
at Module._compile (module.js:425:26)
at Object.Module._extensions..js (module.js:432:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:313:12)
at Function.Module.runMain (module.js:457:10)
at startup (node.js:138:18)
at node.js:974:3
Run Code Online (Sandbox Code Playgroud)
现在,当我这样做时,我想要同样格式良好的输出:
try {
throw new MyError("Ops!");
} catch (e) {
console.log(e); …Run Code Online (Sandbox Code Playgroud) 目前我有以下代码来获取两个查询的结果
dbro.many("SELECT geoname_id, country_name FROM paises WHERE locale_code=$1 LIMIT 10",data.lang)
.then(function(countriesData){
data.countries=countriesData;
dbro.many("SELECT * FROM categorias")
.then(function(categoriesData){
data.categories=(categoriesData)
console.log(data);
res.render('layout', data);
res.end();
})
.catch(function(err){
console.log("error while fetching categories data");
})
})
.catch(function(err){
console.log("error while fetching countries data",err);
});
Run Code Online (Sandbox Code Playgroud)
不知怎的,我认为这是不对的.如果我需要在返回回调之前获得许多查询的结果怎么办?几个then/catch的嵌套变得丑陋.目标是在呈现页面之前准备好所有数据(在Express中)
awaitNode.js 中是否仍然不支持顶级(2020 年 1 月,Node.js 13.5.0)?
我试过一些教程,比如这个,但仍然没有运气,总是得到同样的错误:
D:\NodeJS>node --experimental-modules test.js
(node:17724) ExperimentalWarning: The ESM module loader is experimental.
file:///D:/NodeJS/test.js:9
await test();
^^^^^
SyntaxError: Unexpected reserved word
Run Code Online (Sandbox Code Playgroud)
整个文件内容:
D:\NodeJS>node --experimental-modules test.js
(node:17724) ExperimentalWarning: The ESM module loader is experimental.
file:///D:/NodeJS/test.js:9
await test();
^^^^^
SyntaxError: Unexpected reserved word
Run Code Online (Sandbox Code Playgroud)
我尝试使用"type": "module"in package.json,并将文件重命名为test.mjs,但仍然出现相同的错误,即使使用最新的 Node.js 13.5.0
我究竟做错了什么?
我们最近转移到 Heroku,并在尝试将我们的应用程序连接到数据库时,它不断拒绝我们的查询,并显示消息“自签名证书”。传递rejectUnauthorized解决了这个问题,但现在我想知道,我们应该在生产中这样做吗?如果没有,我们连接到 Heroku PG 数据库的合适方法是什么?
const pgp = require('pg-promise')(/*initOptions*/);
const {ConnectionString} = require('connection-string');
const cnObj = new ConnectionString(process.env.DATABASE_URL);
const cn = {
host: cnObj.hostname,
port: cnObj.port,
database: cnObj.path?.[0],
user: cnObj.user,
password: cnObj.password,
ssl: {
rejectUnauthorized: false,
},
};
const db = pgp(cn);
Run Code Online (Sandbox Code Playgroud) 我遇到了一些我期待与AngularJS一起开箱即用而没有任何问题的东西,但奇怪的是......
我正在使用JSON服务将数据作为2D数组返回:
$scope.data= [
["val-11", "val-12", "val-13"],
["val-21", "val-22", "val-23"]
];
Run Code Online (Sandbox Code Playgroud)
从这里我试图生成一个这样的表:
<table>
<tr ng-repeat="row in data">
<td ng-repeat="col in row">{{col}}</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
我不明白为什么AngularJS不处理这样的基本场景.我可以为父循环获得正确的$ index,如果我需要它,我可以遍历值,但只有一个循环,如"col in data [0]",但我无法得到任何结果尝试使用嵌套循环如上所示.
难道我做错了什么?它似乎太基本了,不能马上工作.请有人帮我解决这个奇怪的问题.
JavaScript 中将统一对象数组克隆为每个对象具有属性子集的最有效方法是什么?
更新
这是最有效的方法还是有更好的方法?——
var source = [
{
id: 1,
name: 'one',
value: 12.34
},
{
id: 2,
name: 'two',
value: 17.05
}
];
// copy just 'id' and 'name', ignore 'value':
var dest = source.map(function (obj) {
return {
id: obj.id,
name: obj.name
};
});
Run Code Online (Sandbox Code Playgroud) 在 JavaScript 中确定文本中使用的换行符类型的最有效(足够快速和可靠)方法是什么 - Unix 与 Windows。
在我的 Node 应用程序中,我必须读取大型 utf-8 文本文件,然后根据它们是使用 Unix 还是 Windows 换行符来处理它们。
当断线的类型不确定时,我想根据最有可能的断线来得出结论。
更新
我@typedef用来定义一些自定义类型,包括@property项目.
当我为一个类做同样的事情时,我可以用它{@link MyClass#property}来引用属性.
但由于某些原因{@link MyType#property}无法解决.
这是一个错误还是有不同的方式来引用这些属性?
我的用法示例:
/**
* @typedef helpers.Column
*
* @property {String} name
*/
/**
* This one resolves correctly: {@link helpers.Column}
*
* This one does not resolve: {@link helpers.Column#name}
*/
Run Code Online (Sandbox Code Playgroud) JavaScript 中推荐的传递包含过滤+映射逻辑的生成器的方法是什么?
不知何故,JavaScript 生成器缺少诸如filter和map操作数之类的基本内容(类似于数组),以便能够创建包含该逻辑的生成器,而无需先运行迭代。
我的直接方法是实现应用逻辑的自定义函数:
function * filter(g, cb) {
let a;
do {
a = g.next();
if (!a.done && cb(a.value)) {
yield a.value;
}
} while (!a.done);
return a.value;
}
function * map(g, cb) {
let a;
do {
a = g.next();
if (!a.done) {
yield cb(a.value);
}
} while (!a.done);
return a.value;
}
Run Code Online (Sandbox Code Playgroud)
但这会造成回调地狱。我想简单地链接一个生成器,就像一个常规数组一样:
// create a filtered & re-mapped generator, without running it:
const gen = myGenerator().filter(a => a > 0).map(b => ({value: …Run Code Online (Sandbox Code Playgroud) javascript ×6
node.js ×4
arrays ×2
pg-promise ×2
2d ×1
angularjs ×1
async-await ×1
clone ×1
generator ×1
jsdoc ×1
postgresql ×1
promise ×1
ssl ×1