Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何等待cordova.plugins.sqlitePorter.exportDbToSql完成后再继续?_Javascript_Android_Cordova_Ionic Framework - Fatal编程技术网

Javascript 如何等待cordova.plugins.sqlitePorter.exportDbToSql完成后再继续?

Javascript 如何等待cordova.plugins.sqlitePorter.exportDbToSql完成后再继续?,javascript,android,cordova,ionic-framework,Javascript,Android,Cordova,Ionic Framework,通过使用SQLite Porter Cordova/Phonegap插件,我试图在继续执行代码之前创建应用程序数据库的备份文件 但是,我不能这样做,因为它是异步的,无论我尝试什么,它总是在successFn函数执行之前完成,即使successFn是一种回调 我已经尝试过使用Promiss,wait/async,但没有效果。我最后一次尝试是使用promise,如下例所示 var successFn = function (sql, count) { console.l

通过使用SQLite Porter Cordova/Phonegap插件,我试图在继续执行代码之前创建应用程序数据库的备份文件

但是,我不能这样做,因为它是异步的,无论我尝试什么,它总是在successFn函数执行之前完成,即使successFn是一种回调

我已经尝试过使用Promiss,wait/async,但没有效果。我最后一次尝试是使用promise,如下例所示

var successFn = function (sql, count) {
               console.log("Success")
            };
var promise = new Promise(function (resolve, reject) {
    cordova.plugins.sqlitePorter.exportDbToSql(db, {
         successFn: successFn
    })
});
promise.then(
    function () { return true; },
    function (erro) { return false;}
);
console.log("END");


我希望日志的顺序是“Success”然后是“END”,但它返回“END”然后是“Success”

Update

当您使用Ionic 1时,您可以使用承诺包装函数并使用它:

function exportDbToSql() {
  var deferred = $q.defer();
  cordova.plugins.sqlitePorter.exportDbToSql(db, {
    successFn: function(sql, count) { 
      deferred.resolve({sql: sql, count: count}) 
    }
  });
  return deferred.promise;
}
当您调用该函数时,它将是:

exportDbToSql().then(function(result) {
  console.log(result.sql);
  console.log(result.count);    
});

旧答案

如果您使用的是离子2+,那么您可以按照他们的文档进行操作

打开命令行并输入

ionic cordova plugin add uk.co.workingedge.cordova.plugin.sqliteporter
npm install @ionic-native/sqlite-porter
然后您可以这样使用它:

import { SQLitePorter } from '@ionic-native/sqlite-porter/ngx';


constructor(private sqlitePorter: SQLitePorter) { }

...

let db = window.openDatabase('Test', '1.0', 'TestDB', 1 * 1024);
// or we can use SQLite plugin
// we will assume that we injected SQLite into this component as sqlite
this.sqlite.create({
  name: 'data.db',
  location: 'default'
})
  .then((db: any) => {
    let dbInstance = db._objectInstance;
    // we can pass db._objectInstance as the database option in all SQLitePorter methods
  });


let sql = 'CREATE TABLE Artist ([Id] PRIMARY KEY, [Title]);' +
           'INSERT INTO Artist(Id,Title) VALUES ("1","Fred");';

this.sqlitePorter.importSqlToDb(db, sql)
  .then(() => console.log('Imported'))
  .catch(e => console.error(e));
在您的情况下,它应该是这样工作的:

this.sqlitePorter.exportDbToSql(db)
  .then(() => console.log('success'))
  .catch(() => console.log('error'))

你用的是哪个版本的爱奥尼亚?啊,对不起,我分心了。我正在使用Ionic 1请检查更新的答案非常感谢,它真的帮助了我,不仅解决了这个问题,还让我了解了困扰我一段时间的另一个问题。太好了。很乐意帮忙!