我有一个按钮,它与服务器进行一些通信,以检查输入的值(通过输入框)是否已经存在.代码如下:
$("#button").click(function () {
var exists = false;
var name = $("#name").val();
socket.emit("check", name);
socket.on("checkReturn", function (data) {
exists = data.result;
});
if (exists) {
console.log("exists")
} else {
if (name.length > 0) {
socket.emit("create", name);
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
问题是checkReturn
调用是异步的,因此代码继续执行而不实际等待结果.如何确保checkReturn
首先完成并且只有其余的代码被执行?
即使我设法使我的代码工作,但有一些我不明白的东西.以下代码正常运行:
socket.on('method', function() {
var payload = {
countrycode: '',
device: ''
};
var d1 = $q.defer();
var d2 = $q.defer();
$q.all([
geolocation.getLocation().then(function(position) {
geolocation.getCountryCode(position).then(function(countryCode){
payload.countrycode = countryCode;
d1.resolve(countryCode);
});
return d1.promise;
}),
useragent.getUserAgent().then(function(ua) {
useragent.getIcon(ua).then(function(device) {
payload.device = device;
d2.resolve(device);
});
return d2.promise
})
]).then(function(data){
console.log(data); //displays ['value1', 'value2']
})
});
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现这一目标?在我只有一个延迟变量之前,即var var deferred = $q.defer();
但是这样,.then()
函数返回了一个结果加倍的对象.
所以我的几个问题是:
$q.defer
变量吗?我在数据库(MarkLogic)中有一个二进制文件(mp4视频文件).我正在使用数据库的Node.js API以块的形式传输文档.设置如下所示:
html文件
<video controls="controls" width="600">
<source src="/video/myvideo.mp4" type="video/mp4">
</video>
Run Code Online (Sandbox Code Playgroud)
然后在Express中我设置了一个处理/ video /:param路由的路由(在数据库中,视频有唯一的标识符,即字符串'/video/myvideo.mp4')
的node.js
// I'm only showing the relevant things in here
const serveVideo = (req, res) => {
var stream = db.documents.read('/gopro/malta.mp4').stream('chunked');
var chunks = [];
var chunkBytes = 0;
var start = 0;
stream.on('data', (chunk) => {
var headers;
var range = req.headers.range;
var total = 214335483; //total length of vid in bytes
if (range) {
var chunkSize = chunk.length;
// (start === 0) ? start = …
Run Code Online (Sandbox Code Playgroud) 我scp
在后台运行命令:
nohup scp file.gz root@target-host:/root/ > nohup.out 2>&1
Run Code Online (Sandbox Code Playgroud)
我输入了密码-我ctrl-z
按下来中止该命令并使用重新启动它bg
,可以通过执行确认它正在运行jobs
。但是,有没有一种方法可以监视文件传输的进度(即是否可以在不将其放在后台运行的情况下运行它)?
谢谢。
我正在与服务人员一起工作,并且遇到一种情况,即在我的Chrome DevTools中的“应用程序”下,我看到一个指示我的服务人员存在错误,但是一切正常,并且控制台没有显示任何错误。此外,我无法单击错误指示器。请参阅附件。
有人可以让我知道该错误指示器是什么吗?如何显示呢?为什么在那儿?
我希望使用Workbox来缓存本地和远程图像资源.目前是否支持,如果是这样的话?
基本上我想拥有以下功能:
workboxBuild.injectManifest({
swSrc: 'app/sw.js',
swDest: 'build/sw.js',
globDirectory: 'build',
globPatterns: [
'*.css',
'index.html',
'app.js',
'http://remote/image.jpg'
],
Run Code Online (Sandbox Code Playgroud)
如果我手动将远程HTTP资产添加到生成的服务工作文件,那么它可以工作(见下文),但我希望生成该服务工作文件而无需手动编辑它.
importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js');
if (workbox) {
console.log(`Yay! Workbox is loaded `);
workbox.precaching.precacheAndRoute([
{
"url": "app.css",
"revision": "f8d6a881fb9d586ef6fd676209e1613b"
},
{
"url": "index.html",
"revision": "ce6238d5b3c1e4e559349549c9bd30aa"
},
{
"url": "app.js",
"revision": "4357dbdbcc80dcfbe1f8198ac0313009"
},
{
"url": "http://remote/image.jpg"
}
]);
} else {
console.log(`Boo! Workbox didn't load `);
}
Run Code Online (Sandbox Code Playgroud) 我已将AngularJS官方文档更改为使用Firebase(手机教程).
这是我的应用程序的路由器:
angular.module('phonecat', ['firebase']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/phones', {
templateUrl: 'partials/phone-list.html',
controller: PhoneListCtrl,
authRequired: false,
pathTo: '/phones'
}).
when('/phones/:age', {
templateUrl: 'partials/phone-detail.html',
controller: PhoneDetailCtrl,
authRequired: true,
pathTo: '/phones/:phoneId'
}).
when('/login', {
templateUrl: 'partials/login.html',
controller: LoginCtrl,
authRequired: false,
pathTo: '/login'
}).
otherwise({
redirectTo: '/phones'
}); }]);
Run Code Online (Sandbox Code Playgroud)
这就是控制器的样子 - 但它可能不正确.登录函数被调用,但我不知道下一步该怎么做.我应该如何将用户从登录页面重定向到phone-detail.html页面?
'use strict';
function PhoneListCtrl($scope, angularFire, angularFireAuth) {
var url = 'https://<link>.firebaseio.com/';
var promise = angularFire(url, $scope, 'phones', []);
angularFireAuth.initialize(url, {scope: $scope, name: "user"});
}
function PhoneDetailCtrl($scope, $routeParams, angularFire, angularFireAuth) {
var …
Run Code Online (Sandbox Code Playgroud) 给定标准的Express.js设置
const express = require('express');
const app = express();
const router = express.Router();
router.get('/test/:id', (req, res) => {
return res.status(200).json({ hello: 'world' });
});
app.use('/api', router);
app.listen(3000, () => console.info('Up on port 3000));
Run Code Online (Sandbox Code Playgroud)
我一次又一次地向端点发出1000个请求:
const fetch = require('node-fetch');
for (let i = 0; i < 1000; i++) {
let id = Math.floor(Math.random() * 12) + 1;
fetch(`http://localhost:3000/api/test/${id}`).then(res => res.json()).then(data => console.log(data)).catch(error => console.error(error));
}
Run Code Online (Sandbox Code Playgroud)
我确实经常看到返回的数据,但有时我会看到ECONNRESET
错误。ECONNRESET
错误消息的数量也各不相同:有时我会收到一些,有时会更多。我确实了解该消息,但是无法解决该问题背后的问题。
这是一个示例错误:
{ FetchError: request to http://localhost:3000/api/test/8 failed, reason: connect ECONNRESET 127.0.0.1:3000 …
Run Code Online (Sandbox Code Playgroud) 给定一个脚本'random.sh',其中包含以下内容:
#!/bin/bash
RANDOM=`python -v -d -S -c "import random; print random.randrange(500, 800)"`
echo $RANDOM
Run Code Online (Sandbox Code Playgroud)
运行它会产生给定范围之外的随机数:
[root@localhost nms]# ./random.sh
23031
[root@localhost nms]# ./random.sh
9276
[root@localhost nms]# ./random.sh
10996
Run Code Online (Sandbox Code Playgroud)
将RANDOM变量重命名为RAND,给出了给定范围内的随机数,即
#!/bin/bash
RAND=`python -v -d -S -c "import random; print random.randrange(500, 800)"`
echo $RAND
Run Code Online (Sandbox Code Playgroud)
得到:
[root@localhost nms]# ./random.sh
671
[root@localhost nms]# ./random.sh
683
[root@localhost nms]# ./random.sh
537
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 为什么?:)
请查看以下应用程序:
https://stackblitz.com/edit/angular-1qxhep
我正在尝试从另一个对话框中打开一个对话框。共享示例在 Chrome 中运行良好,但在 Safari 中不起作用。
如果您检查 safari 中的两个 console.log() 语句,结果看起来会有所不同:
苹果浏览器
第一个对话框信息:
MatDialogRef {_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, id: "dialog1", disableClose: false, _afterOpen: Subject, …}
Run Code Online (Sandbox Code Playgroud)
第二个对话框信息:
MatDialogRef {_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, id: "dialog1", disableClose: false, _afterOpen: Subject, …}
Run Code Online (Sandbox Code Playgroud)
铬合金
第一个对话框信息:
MatDialogRef {_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, id: "dialog1", disableClose: false, _afterOpen: Subject, …}
Run Code Online (Sandbox Code Playgroud)
第二个对话框信息:
MatDialogRef {_overlayRef: OverlayRef, _containerInstance: MatDialogContainer, id: "dialog2", disableClose: false, _afterOpen: Subject, …}
Run Code Online (Sandbox Code Playgroud)
请注意,对于 Chrome,传递给对话框的“id”参数被正确选取,对于 Safari,我没有得到相同的行为,因此 Safari 不会打开第二个对话框面板。
我正在通过Eric扩展这个伟大的元素:https://github.com/ebidel/geo-location
我添加的一个功能是我根据返回的lat和lng值执行一个聚合物-ajax请求,仅此一行:
<polymer-ajax auto handleAs="json" response="{{data}}" url="http://service/?latlng={{latitude}},{{longitude}}></polymer-ajax>
它返回一些数据.目前有两个请求发送到此服务,一个失败(因为没有传入lat和lng值),第二个成功.
如何强制我的ajax调用等待lat和lng值存在?(以后就像行为问题这样的承诺)
有没有人有使用“github.com/gohugoio/hugo/resources/images/exif”使用Go从本地图像中提取元数据的示例?
我浏览了文档,因为我是 Go 的新手,所以我不能 100% 确定我是否在写东西。我确实阅读了图片,但我不确定下一步会是什么。
fname := "image.jpg"
f, err := os.Open(fname)
if err != nil {
log.Fatal("Error: ", err)
}
Run Code Online (Sandbox Code Playgroud)
(编辑 1)其实我想我找到了一个解决方案:
d, err := exif.NewDecoder(exif.IncludeFields("File Type"))
x, err := d.Decode(f)
if err != nil {
log.Fatal("Error: ", err)
}
fmt.Println(x)
Run Code Online (Sandbox Code Playgroud)
但是,问题是我如何知道哪些字段可用?File Type
例如返回<nil>
javascript ×5
node.js ×3
angularjs ×2
express ×2
promise ×2
ajax ×1
angular ×1
angular5 ×1
angularfire ×1
bash ×1
deferred ×1
econnreset ×1
exif ×1
firebase ×1
go ×1
http ×1
jquery ×1
linux ×1
marklogic ×1
nohup ×1
polymer ×1
python ×1
random ×1
safari ×1
scp ×1
socket.io ×1
video ×1
workbox ×1