小编Tam*_*mas的帖子

socket.io - socket.on等待承诺

我有一个按钮,它与服务器进行一些通信,以检查输入的值(通过输入框)是否已经存在.代码如下:

$("#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首先完成并且只有其余的代码被执行?

javascript jquery node.js promise socket.io

7
推荐指数
2
解决办法
1万
查看次数

AngularJS $ q.all&multiple $ q.defer

即使我设法使我的代码工作,但有一些我不明白的东西.以下代码正常运行:

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()函数返回了一个结果加倍的对象.

所以我的几个问题是:

  1. 我需要多个$q.defer变量吗?
  2. 以上是等待两个异步调用来完成和填充有效负载对象的最佳方法吗?

javascript promise deferred angularjs

7
推荐指数
2
解决办法
6262
查看次数

Node.js/Express视频流(HTTP 206部分内容)

我在数据库(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)

javascript video marklogic node.js express

7
推荐指数
1
解决办法
3754
查看次数

在后台运行SCP并监视进度

scp在后台运行命令:

 nohup scp file.gz root@target-host:/root/ > nohup.out 2>&1
Run Code Online (Sandbox Code Playgroud)

我输入了密码-我ctrl-z按下来中止该命令并使用重新启动它bg,可以通过执行确认它正在运行jobs。但是,有没有一种方法可以监视文件传输的进度(即是否可以在不将其放在后台运行的情况下运行它)?

谢谢。

linux scp nohup

6
推荐指数
2
解决办法
2万
查看次数

Chrome DevTools控制台中的Service Worker(不可见)错误

我正在与服务人员一起工作,并且遇到一种情况,即在我的Chrome DevTools中的“应用程序”下,我看到一个指示我的服务人员存在错误,但是一切正常,并且控制台没有显示任何错误。此外,我无法单击错误指示器。请参阅附件。

有人可以让我知道该错误指示器是什么吗?如何显示呢?为什么在那儿?

在此处输入图片说明

google-chrome google-chrome-devtools service-worker

6
推荐指数
1
解决办法
707
查看次数

缓存远程HTTP资产

我希望使用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)

workbox

6
推荐指数
1
解决办法
318
查看次数

如何正确实现angularFireAuth?

我已将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)

angularjs firebase angularfire

5
推荐指数
1
解决办法
3484
查看次数

Express.js(Node.js)中的ECONNRESET有多个请求

给定标准的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)

javascript http node.js express econnreset

5
推荐指数
1
解决办法
1329
查看次数

Python - Bash - 随机数

给定一个脚本'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)

我的问题是 - 为什么?:)

python random bash

3
推荐指数
1
解决办法
846
查看次数

使用 Angular Material 和 Safari 从另一个对话框打开对话框

请查看以下应用程序:

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 不会打开第二个对话框面板。

safari angular-material angular-material2 angular angular5

3
推荐指数
1
解决办法
1万
查看次数

承诺使用聚合物

我正在通过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值存在?(以后就像行为问题这样的承诺)

javascript ajax polymer

2
推荐指数
1
解决办法
3329
查看次数

使用 Go 读取 Exif 元数据

有没有人有使用“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>

exif go

2
推荐指数
1
解决办法
2856
查看次数