小编Zac*_*hal的帖子

如何在异步协程中包装同步函数?

我正在使用aiohttp构建一个API服务器,将TCP请求发送到单独的服务器.发送TCP请求的模块是同步的,并且是出于我的目的的黑盒子.所以我的问题是这些请求阻止了整个API.我需要一种方法将模块请求包装在异步协程中,该协程不会阻止API的其余部分.

所以,仅仅使用sleep一个简单的例子,有没有办法以某种方式将耗时的同步代码包装在非阻塞协程中,如下所示:

async def sleep_async(delay):
    # After calling sleep, loop should be released until sleep is done
    yield sleep(delay)
    return 'I slept asynchronously'
Run Code Online (Sandbox Code Playgroud)

python asynchronous python-3.x python-asyncio aiohttp

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

如何检查 Map 或 Set 是否为空?

对于 JavaScript 中的传统对象,使用以下Object.keys方法很容易检查它是否为空:

const emptyObj = {};
console.log(Object.keys(emptyObj).length === 0);  // true, i.e. "empty"

const populatedObj = { foo: 'bar' };
console.log(Object.keys(populatedObj).length === 0);  // false, not empty
Run Code Online (Sandbox Code Playgroud)

尽管有点多余,但如果您愿意,也可以对数组使用相同的方法:

const emptyArr = [];
console.log(Object.keys(emptyArr).length === 0);  // true

const populatedArr = [1, 2, 3];
console.log(Object.keys(populatedArr).length === 0);  // false
Run Code Online (Sandbox Code Playgroud)

然而,ES6 方便的新数据结构MapSet 的工作方式不同。如果您尝试Object.keys在它们上使用,您将始终得到一个空数组!

const populatedSet = new Set(['foo']);
console.log(Object.keys(populatedSet).length);  // 0

const populatedMap = new Map([['foo', 1]]);
console.log(Object.keys(populatedMap).length);  // 0
Run Code Online (Sandbox Code Playgroud)

那么,检查您喜欢的新 …

javascript ecmascript-6

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

如何将基于IIFE的JavaScript模块导入Angular TypeScript应用程序?

因此,我有一个第三方SDK,写为基于Oldschool IIFE的模块。换句话说,它看起来像这样:

var ThirdPartySDK = (function() {
  var export = {};

  // Add some methods to export

  return export;
})();
Run Code Online (Sandbox Code Playgroud)

然后,您应该通过在全局范围内引用它来使用它,如下所示:

<html>
  <body>
    <script src="lib/ThirdPartySDK.js">
    <script>
      ThirdPartySDK.foo();
    <\script>
  <\body>
<\html>
Run Code Online (Sandbox Code Playgroud)

当然,我仍然可以以这种方式使用它,但这真的是Angular和TypeScript的最佳实践吗?有什么方法可以使用angular / TypeScript / webpack进行设置,以便可以使用正确的import语句?像这样:

import { ThirdPartySDK } from '../lib/ThirdPartySDK.js';
ThirdPartySDK.foo();
Run Code Online (Sandbox Code Playgroud)

javascript iife typescript webpack angular

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