相关疑难解决方法(0)

在async/await中包装承诺

我正在努力使用async/await并从Promise返回一个值.

function test () {
  return new Promise((resolve, reject) => {
    resolve('Hello')
  })
} 

async function c() {
  await test()
}
Run Code Online (Sandbox Code Playgroud)

据我所知,我应该能够通过以下方式获得价值:

console.log(c())
Run Code Online (Sandbox Code Playgroud)

但显然我在这里错过了一点,因为这会回报一个承诺.不应该打印"你好"吗?在类似的说明中,我不清楚回调是否需要在将其包装在async/await之前转换为promise?

node.js promise async-await ecmascript-next

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

解决后如何制止承诺链?

我希望在通过某些条件解决后停止承诺链.下面的代码可能有助于理解我在说什么.

function update(id, data) {
    return new Promise((resolve, reject) => {
        let conn;

        pool.get()
        .then((db) => {
            conn = db;

            if(Object.keys(data).length === 0) {
                return resolve({ updated: 0 });
            }
            else {
                return generateHash(data.password);
            }
        })
        .then((hash) => {
            conn.query("UPDATE ... ", (err, queryResult) => {
                if(err) {
                    throw err;
                }

                resolve({ updated: queryResult.affectedRows });
            });
        })
        .catch((err) => { ... })
    });
}
Run Code Online (Sandbox Code Playgroud)

请注意,pool.get()是promise包装的API,用于从我创建的MySQL模块获取连接池.

我正在尝试做的是更新用户数据.并且为了节省服务器资源,如果没有要更新的数据,我避免更新(Object.keys(data).length === 0).

当我尝试这个代码时,即使没有数据要更新,第二个(更新数据库)总是会发生!

我读过这篇文章,但没有奏效.当我调用"return resolve();"时为什么没有停止承诺链?我该如何正确地阻止它?我真的很喜欢使用Promises,但有时候,这种事情会让我发疯.非常感谢帮助我解决这个问题.谢谢!

PS无论如何,我正在使用节点v6.2.2.

javascript node.js promise

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

如何在 Node 中承诺并等待 setImmediate?

我一直在阅读有关如何不阻止 Node 的事件循环的内容。避免阻塞的一种方法是使用分区

我试图在我的代码中使用分区循环,但我似乎无法等待我的循环。这是我的代码的简化版本:

    const report = {
        someValue: 0
    };

    const runLoop = async () => {
        report.someValue += 1;

        // all sorts of async operations here that use async-await

        if (report.someValue < 1000) {
            await setImmediate(runLoop);
        }
    };

    await runLoop();
    console.log('Report is', report);
Run Code Online (Sandbox Code Playgroud)

这会返回“Report is { someValue: 1 }”,但我希望 someValue 为 1000。

我猜 setImmediate 不会返回承诺,所以我尝试承诺它:

    const setImmediatePromise = util.promisify(setImmediate);

    const report = {
        someValue: 0
    };

    const runLoop = async () => {
        report.someValue += 1; …
Run Code Online (Sandbox Code Playgroud)

javascript recursion node.js async-await setimmediate

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

AngularJS承诺不使用FileReader解析文件

我正在尝试在我的服务中编写一个非常简单的函数,它将创建一个FileReader,读取我发送它的小图像文件,并将此结果返回给我的控制器.文件到我的服务就好了.它到达我的控制器并只记录一个空白行.我假设我在某种程度上弄乱了这个承诺部分.那里我哪里错了?

服务功能 -

this.fileRead  = function(file) {
    var deferred = $q.defer();

    var reader = new FileReader();
    reader.readAsDataURL(file);

    deferred.resolve(reader.result);

    return deferred.promise;
};
Run Code Online (Sandbox Code Playgroud)

控制器功能 -

$scope.onFileSelect = function($files) {
     MyService.fileRead($files[0])
                  .then(function(result) {
                    console.log(result);
                 });
};
Run Code Online (Sandbox Code Playgroud)

javascript promise angularjs

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

Node.JS Async/Await处理回调?

除了在bluebird中混合还是返回新的Promise()之外,有没有办法在异步函数()中处理回调函数?

例子很有趣......

问题

async function bindClient () {
  client.bind(LDAP_USER, LDAP_PASS, (err) => {
    if (err) return log.fatal('LDAP Master Could Not Bind', err);
  });
}
Run Code Online (Sandbox Code Playgroud)

function bindClient () {
  return new Promise((resolve, reject) => {
    client.bind(LDAP_USER, LDAP_PASS, (err, bindInstance) => {
      if (err) {
        log.fatal('LDAP Master Could Not Bind', err);
        return reject(err);
      }
      return resolve(bindInstance);
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

有更优雅的解决方案吗?

javascript asynchronous node.js

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

将d3.csv转换为Promise?

使用Angular 5,我想将CSV文件加载到异步管道中,如何将其转换为Promise?

d3.csv(this.csvFile, function(data) {
      console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

promise d3.js

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

如何用 async/await 解决厄运金字塔?

我想知道如何避免这段代码的厄运金字塔:

原码

var PlayerService = {
    getPlayerTeamId: function(playerId, callback) {
        $.ajax({
            url: "/player/" + playerId + "/team",
            success: function(team) {
                callback(team.id)
            }
        });
    },
    getPlayers: function(teamId, callback) {
        $.ajax({
            url: "/team/" + teamId + "/player",
            success: callback
        });
    }
};

var PlayerDetailsController = {
    playerId: 8,
    showTeammatesClick: function() {
        PlayerService.getPlayerTeamId(this.playerId, function(teamId) {
            PlayerService.getPlayers(teamId, function(playerList) {
                // Render playerList
            });
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

这是我的 async/await 版本,以避免出现金字塔: 我的版本

var PlayerService = {
    getPlayerTeamId: async function(playerId, callback) {
        return await $.ajax({
                   url: "/player/" …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 es6-promise

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

jQuery $.when().done() 等价于没有 jQuery

我想在 Vanilla JS 或 Javascript 中执行以下等效操作,但我不知道如何:

$.when( { testing: 123 } ).done(function( x ) {
  alert( x.testing ); // Alerts "123"
});
Run Code Online (Sandbox Code Playgroud)

在 Vanilla JS 或 Javascript 中是否有任何等价物?语法是什么?

javascript jquery

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

如何创建从回调函数返回promise的函数

我使用有api的javascript库.

libapi.callnetwork(arg1,callback(data){
//handle data
}
Run Code Online (Sandbox Code Playgroud)

然后我创建服务函数来像这样调用api

myFunction():Promise<any>{
  libapi.callnetwork(arg1,callback(data){
    return new Promise(resolve=>resolve(data));
  })
}
Run Code Online (Sandbox Code Playgroud)

myFunction将收到错误,因为它必须返回promise或声明为void.如何创建从此API返回承诺的函数?

callback promise typescript angular

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

如何在node.js中的get-request之后返​​回值?

当我收到服务器响应时如何获取这个值?

当我运行它时,终端没有输出任何信息。

console.log(a);
function findMaxID() {
    var a = needle.get(URL, function(err, res){
        if (err) throw err;
        return 222; 
    });
    return a;
}
Run Code Online (Sandbox Code Playgroud)

javascript node.js needle.js

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