如何使demo()按顺序执行。
demo()
async function demo() {
doAll()
console.log("I DO NOT print sequentially");
}
async function doAll() {
var number = await getNumber();
var double = await doubleWithTimeout(number);
console.log(number,double)
}
async function getNumber() {
所以,我有这样的测试:
it 'sample test', (done)->
await Promise.resolve 0
Promise.resolve 0
.then ->
done()
null
注意,最后的null是为了避免返回Promise。但是,测试使用经典的"Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both"
我检查了结果JS代码,没什么奇怪的:
it
我在EJS中使用MySQL从db(带有承诺)获取数据。当我得到数据时,我会在console.log(数据)中看到服务器控制台中的数据。但是当我想用ejs显示数据时,什么都没有发生,为什么?这是我的密码:
<%
let conn = connection() //Connection is a func who returned a mysql.createConnection() with the good props
function GetDataToShow(){
return new Promise((resolve, reject) => { //Promis
我试图了解一些关于以下行为的承诺。
当我push向promises数组承诺时,console.log就会被执行。我认为这是因为当我push的时候,我实际上执行了承诺。
但是当我尝试做Promise.all时,我没有看到相同的console.log消息被打印出来,这只是沉默。我可以看到每个resolve的返回值,如果我将它们从Promise.all和console.log中分解出来,但是,同样,我看不到console.log消息(比如Printed for promise A during push)。
为什么会发生这种情况?
import * as React from "react&
我很难理解异步/等待语法
我似乎无法理解的是,为什么在这段代码中,即使在与mysql的连接中出现错误时,“连接”也会被登录到控制台。
mongoose.Promise = Promise;
function connection() {
//return a promise to be consumed in an async function
return new Promise((resolve, reject) => {
mongoose.connect('mongodb://localhost/testdatabase');
我无法在抛出await is only valid in async function错误的'new Promise‘块中使用async/await。我甚至不知道这是否可能,但我需要使用它或一种方式来实现我想要的。这是我想要做的: 用户输入一个查询,它将通过一个名为doesExist的recursive function。我必须使用递归函数,因为API并不总是为查询提供数据。递归函数将尝试3次,也就是说,它将发送3个api请求以获取数据,然后返回一个错误消息“无法获取数据”。在函数中,我返回一个新的promise,因为我必须从那里发出api请求。 为了获取数据,我以前使用过reque
我尝试组合两个函数值(来自a()和b()),但是代码并没有像预期的那样等待函数test中的等待语句。相反,结果值直接打印错误的结果。
function resData(status, message) {
return { ok: status, message: message };
}
function a() {
return resData(true, 'A');
}
async function b() {
// simulate some long async task (e.g. db call) and then return the b
当我原型化一些我需要为我的项目实现的逻辑时,我注意到async-await和Promise的一些有趣的行为。 // Notice this one returns a Promise
var callMe = function(i) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(i)
resolve(`${i} is called :)`)
}, (i+1)*1000)
})
}
我开始使用ES7 feature async/await,它提供了处理异步任务的最佳方法,并使您的代码更干净、更易读。
然而,它不能让你访问由异步函数创建的Promise,所以如果你在异步函数中做了一些异步请求,你应该中止它,然后等待它,然后返回结果。我的意思是:
async function doStuff() {
//stuff...
var value = await new Promise(function(resolve) {
$.get('http://some/url/...', function(result) {
因此,我一直很高兴地使用这些中间函数来包装异步操作,这些操作是我需要依次操作的。例如,“确保sqlite存在,然后创建打开模式”等。我刚刚切换到ESLint,我不知道它想要什么语法,当我给出它想要的语法时,它仍然不能工作,也不能编译。如果我做了显而易见的事情,并将version2切换为使用Promise<boolean>,那么编译将失败:src/dimTest.ts(23,13): error TS2322: Type 'void' is not assignable to type 'boolean'
我是误解了一些承诺,只是因为它有效而感到幸运,
努力从承诺中得到价值。
当我解析承诺和console.log时,我看到如下结果:
46 38
这是我期望看到的正确值。但是,当我调用应该返回此承诺的方法(从websocket接收数据)时,我得到以下内容:
user id is matched_id 1096
这是我的密码。这是从我的websocket接收数据的方法:
async sendData(data){
if(this.socketRef.readyState !== WebSocket.OPEN) {
console.log('we are still waiting')
a
我是的Node 8
尝试使用await时出现以下错误。
SyntaxError: await is only valid in async function
代码:
async function addEvent(req, callback) {
var db = req.app.get('db');
var event = req.body.event
db.App.findOne({
where: {
owner_id: req.user_id,
}
}).then((app) =&g